#!/usr/bin/env python3 ''' PortScan v3 ----------- This application scans for open ports on the designated system. It uses multiprocessing to speed up this process. ''' import socket import subprocess import sys from datetime import datetime from multiprocessing import Pool def scan(port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((target_ip, port)) if result == 0: print("Port {}:\tOpen".format(port)) sock.close() except socket.gaierror: print('Hostname could not be resolved.') sys.exit(0) except socket.error: print("Couldn't connect to server.") sys.exit(0) except: return if __name__ == '__main__': ports = list(range(1,4096)) target = '' try: target = sys.argv[1] except: print("\nUsage:\t{} [target]\n\n\tScan for open ports on target machine.\n".format(sys.argv[0])) sys.exit(0) # Clear the screen subprocess.call('clear', shell=True) target_ip = socket.gethostbyname(target) # Print a nice banner with information on which host we are about to scan print("-" * 60) print("Please wait, scanning remote host", target_ip) print("-" * 60) # Check what time the scan started t1 = datetime.now() with Pool(processes = 8) as p: p.map(scan, ports) # Checking the time again t2 = datetime.now() # Calculates the difference of time, to see how long it took to run the script total = t2 - t1 # Printing the information to screen print('Scanning Completed in: ', total)