#!/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)
|