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()