Crear escaner de puertos con Python

#!/usr/bin/python
try:
    import optparse, sys, re, socket
except:
    print("Error executing 'import optparse, sys, re, socket' command")
    exit(1)
try:
    import nmap
except:
    print "Error importing nmap module. It is possible you need running 'apt-get install python-nmap'"
    exit(1)
def checkIp(ip):
    if (re.match("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",ip)):
        host = ip
    elif re.match(r'^[a-zA-Z0-9_]{,63}(\.[a-zA-Z0-9_]{,63}){3}$',ip): #("^\W+(\.\W)$", ip):
        host = socket.gethostbyname(ip)
    else:
        host=""
        print "Name/IP host wrong. You have to write a FQDN name or a IP direction"
        exit(3)
    return host
def main():
    parser = optparse.OptionParser("usage%prog " + "-H <target host> -p <target port> + -N <target_network>")
    parser.add_option('-H', dest = 'host', type = 'string', help = 'Please, specify the target host')
    parser.add_option('-P', dest = 'protocol', type = 'string', help = 'Please, specify the transport protocol: tcp or udp')
    parser.add_option('-p', dest = 'ports', type = 'string', help = 'Please, specify the target port(s) separated by comma')
    (options, args) = parser.parse_args()
    if (options.host == None): 
        print '[-] You must specify a target host or a target network.'
        exit(0)
    if (options.ports == None): 
        print '[-] You must specify a target port(s).'
        exit(0)
    if ((options.protocol == None) or (options.protocol != "tcp" and options.protocol != "udp")): 
        print '[-] You must specify the transport protocol: tcp or udp.'
        exit(0)
    protocol = options.protocol
    host=checkIp(options.host)    
    ports = options.ports.split(',')
    scanner=nmap.PortScanner() 
    for port in ports:
        try:
            print('Analizing %s, %s/%d' % (host, protocol,(int(port))))
            if (protocol != "tcp"):
                scanner.scan(host, port, '-sU')
            else:
                scanner.scan(host, port)
            print " [+] "+ host + "(" + scanner[host].state() + ") " + protocol +"/" + port + "->" + scanner[host][protocol][int(port)]['state']
        except nmap.PortScannerError:
            print('Nmap ERROR: %s ' % sys.exc_info()[0])
            exit(2)
        except:
            print("Unexpected ERROR: %s" % sys.exc_info()[0])
            exit(3)
        
if __name__ == "__main__":
    main()
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s