Python Port Sweep with Service Mapping Script

Python automation that enumerates ports and identifies running services for faster triage and analysis.

import sys
import socket
import multiprocessing

# Function to scan ports
def scan_port(target, port):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)
        result = s.connect_ex((target, port))
        if result == 0:
            try:
                service = socket.getservbyport(port)
            except:
                service = "unknown"
            print("Port {} ({}) is open".format(port, service))
        s.close()

    except KeyboardInterrupt:
        print("\nExiting")
        sys.exit()

    except socket.gaierror:
        print("\nHostname could not be resolved")
        sys.exit()

    except socket.error:
        print("\nServer not responding")
        sys.exit()


if __name__ == "__main__":
    if len(sys.argv) == 2:
        target = socket.gethostbyname(sys.argv[1])
    else:
        target = input("Enter target IP address or hostname: ")

    # Create multiprocessing pool
    pool = multiprocessing.Pool()

    # Launch scans
    results = []
    for port in range(1, 65536):
        results.append(pool.apply_async(scan_port, args=(target, port)))

    # Close pool and wait for workers
    pool.close()
    pool.join()

    # Retrieve results
    for result in results:
        result.get()