Port-scanner

# -*- encoding=utf-8 #!/usr/bin/env python import socket, time, datetime, argparse, os, sys from termcolor import colored os.system('clear') b = 0 info = """ _______ _______ _______ _________ _______ _______ _______ _ _ _______ _______ ( ____ )( ___ )( ____ )\__ __/ ( ____ \( ____ \( ___ )( ( /|( ( /|( ____ \( ____ ) | ( )|| ( ) || ( )| ) ( | ( \/| ( \/| ( ) || \ ( || \ ( || ( \/| ( )| | (____)|| | | || (____)| | | _____ | (_____ | | | (___) || \ | || \ | || (__ | (____)| | _____)| | | || __) | |(_____)(_____ )| | | ___ || (\ \) || (\ \) || __) | __) | ( | | | || (\ ( | | ) || | | ( ) || | \ || | \ || ( | (\ ( | ) | (___) || ) \ \__ | | /\____) || (____/\| ) ( || ) \ || ) \ || (____/\| ) \ \__ |/ (_______)|/ \__/ )_( \_______)(_______/|/ \||/ )_)|/ )_)(_______/|/ \__/ V1.0 by jopcode Ejemplo de uso: python port-scann.py domain.com 1 5000 - podra escanear desde el puerto 1 al 5000 del host 'domain.com' """ print colored(info,"red", attrs=['bold']) # Leer sobre el "argparse" viene bastante bien para analizar argumentos. parser = argparse.ArgumentParser(description = info, formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('host', metavar='H', help='Host name you want to scan') parser.add_argument('startport', metavar='P1', nargs='?', help='Start scanning from this port') parser.add_argument('endport', metavar='P2', nargs='?',help='Scan until this port') args = parser.parse_args() # Host para escanear los puertos host = args.host # OBtiene la direccion ip del host ip = socket.gethostbyname(host) # Comprobamos si se han definido el inicio y final de los puertos a escanear # Si no son definidos se usaran los puertos TCP mas populares if(args.startport) and args.endport: # SI la condicion se cumple, escaneara dentro de este rango start_port = int(args.startport) end_port = int(args.endport) else: # SI la condicion no se cumple, se usaran los puertos mas comunes para escanear b = 1 # Lista de los puertos abiertos open_ports = [] # Puertos TCP mas populares ports = { '21': 'FTP', '22': 'SSH', '23': 'TELNET', '25': 'SMTP', '53': 'DNS', '69': 'TFTP', '80': 'HTTP', '109': 'POP2', '110': 'POP3', '123': 'NTP', '137': 'NETBIOS-NS', '138': 'NETBIOS-DGM', '139': 'NETBIOS-SSN', '143': 'IMAP', '156': 'SQL-SERVER', '389': 'LDAP', '443': 'HTTPS', '546': 'DHCP-CLIENT', '547': 'DHCP-SERVER', '995': 'POP3-SSL', '993': 'IMAP-SSL', '2086': 'WHM/CPANEL', '2087': 'WHM/CPANEL', '2082': 'CPANEL', '2083': 'CPANEL', '3306': 'MYSQL', '8443': 'PLESK', } # Tiempo de inicio start_time = time.time() print colored("[+] Port Scanner", "yellow", attrs=['bold']) if (b): # no se proporciono un rango de puertos se usaran los mas comunes print colored("\n[+] Analizando Puertos mas comunes en: %s", "blue", attrs=['bold']) % (host) else: # Se espesifico un rango de puertos para escanear print colored("\n[+] Scan lanzado en %s desde los puertos %s - %s: ", "blue", attrs=['bold']) % (host, start_port, end_port) print colored("[+] A las %s", "blue", attrs=['bold']) % (time.strftime("%I:%M:%S %P")) # Conectara a los puertos y comprobara si estan abiertos o cerrados def check_port(host, port, result = 1): # Usa 3 argumentos # Host: Ip a escanear # puerto: numero del puerto a escanear try: # Creo un objecto socket llamado 'S' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Tiempo de espera del socket para no ser por siempre s.settimeout(0.5) # COnecta al socket # Si se hizo una conexion correcta significa que el puerto esta abierto y R devolvera 0 r = s.connect_ex((host, port)) if r == 0: result = r # Cerrar el socket s.close() except Exception, e: pass # Retorna el resultado del scan return result # Lee el diccionario de puertos y servicios # a la vez comprueba el nombre de servicio correspondiente a un puerto def get_service(port): # Convierte INT en STR port = str(port) # Comprueba el puerto en los puertos comunes if port in ports: return ports[port] # Devulve el nombre del servicio else: return 0 # No se identifica el servicio try: print colored("\n[+] Scan en progreso...", "red", attrs=['bold']) print colored("[+] Comenzando el scan de puertos", "red", attrs=['bold']) # No se dio ningun rango de puertos if b: # Scanea los puertos comunes for p in sorted(ports): sys.stdout.flush() p = int(p) # Conecta al puerto response = check_port(host, p) if response == 0: # Añade a la lista de puertos abiertos open_ports.append(p) else: # Se dio un rango de puertos for p in range(start_port, end_port + 1): sys.stdout.flush() # Conecta al puerto response = check_port(host, p) if response == 0: # Añade a la lista de puertos abiertos open_ports.append(p) print colored("\n[+] Scan completado a las %s", "blue", attrs=['bold']) % (time.strftime("%I:%M:%S %p")) end_time = time.time() # Tiempo total de uso del scan total_time = end_time - start_time print colored("'\n\t[-] Scan info: %s", "white", attrs=['bold']) % (host) if total_time <= 60: total_time = str(round(total_time, 2)) print("\t[-] Scan hecho en %s segundos") % (total_time) else: total_time = total_time / 60 print("\t[-] Scan hecho en %s minutos") % (total_time) if open_ports: # Hay puertos abiertos print "\t[-] Puertos abiertos: " for i in sorted(open_ports): service = get_service(i) if not service: # No se reconocio el servicio service = "Unknown service" print('\t[-] %s - %s: Abierto') % (i, service) else: # No se encontraron puertos abiertos print colored("\n[+]No se encontraron puertos abiertos :'(", "red", attrs=['bold']) except KeyboardInterrupt: # Si se interrumpe con un "ctrl-c" por ejemplo print "Bye!" sys.exit(1)
SImple port scanner of port common and a range of port

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.