1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| import socket import threading import sys import argparse import pyfiglet from datetime import datetime
class bcolors: BLUE = '\033[94m' RED = '\033[31m' GREEN = '\033[92m' GOLD = '\033[93m' ENDC = '\033[0m' BOLD = '\033[1m'
def portscan(target, port, lock, isfilter): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(0.5) isOpen = False try: con = s.connect((target,port)) lock.acquire() print(bcolors.GREEN + "[+] " + 'Port:', port, "status: Open") open_ports.append(port) lock.release() except socket.timeout as e: lock.acquire() if not isfilter: print(bcolors.RED + "[x] " + 'Port:', port, "Status: Timeout") lock.release() except socket.error as e: lock.acquire() if not isfilter: print(bcolors.RED + "[x] " + 'Port:', port, "Status: Error:", str(e)) lock.release() finally: s.close()
def printBanner(width): ascii_banner = pyfiglet.figlet_format('TCP Port Scanner', font="slant", width=100) print (bcolors.BLUE + ascii_banner) print (bcolors.BLUE + "writed by @slacr".rjust(width)) print (bcolors.BLUE + "inspired by @bvr0n".rjust(width) + bcolors.ENDC)
open_ports = [] def main(): target = "" width = 80 printBanner(width)
parser = argparse.ArgumentParser() parser.add_argument('-t', '--target', help='set Target') parser.add_argument('-p', '--port', help='set Port Range (e.g. 1-2000 or 80)') parser.add_argument('-f', '--filter', action='store_true', help='only show open ports') args = parser.parse_args()
if not args.target or not args.port: parser.print_help() exit() else: target = args.target port_range = args.port print(bcolors.GOLD + "-" * width) print("Scanning Target: " + target) start_time = datetime.now() print("Scanning started at:" + str(start_time)) print("-" * width) print (bcolors.BOLD + "[+] Scanning TCP Ports: " + port_range)
if '-' in port_range: start_port, end_port = port_range.split('-') start_port = int(start_port) end_port = int(end_port) else: start_port = int(port_range) end_port = int(port_range) lock = threading.Lock()
threads = [] for port in range(start_port, end_port+1): t = threading.Thread(target=portscan,kwargs={'target':target, 'port':port, 'lock':lock, 'isfilter':args.filter}) threads.append(t) t.start() for t in threads: t.join() print(bcolors.GOLD + "-" * width) print(bcolors.GOLD + "open_ports:" + " ".join(map(str, open_ports))) end_time = datetime.now() print("Scanning finished at:" + str(end_time)) print("Scanning duration:", format((end_time - start_time).total_seconds() * 1000, '.6f'), "ms") print("-" * width) if __name__ == '__main__': main()
|