Scapy es un manipulador de paquetes interactivo realmente potente y flexible escrito en Python que permite esnifar, generar paquetes mangled, enviar paquetes de red, probar equpamiento, descubrir y escanear redes, y desarrollar nuevos protocolos de forma trivial.
Scapy puede ser ejecutado como utilidad standalone o bien puede ser incluida como librería en nuestros propios proyectos mediante import
. Scapy está disponible en Linux y otros sistemas POSIX como Mac OS X. También existe un port a Windows que podéis encontar en secdev.
Para ejecutar Scapy necesitamos tener privilegios de superusuario en el sistema ya que es necesario el control de las interfaces de red. Esta herramienta puede ser realmente útil para testear la seguridad de nuestras aplicaciones y de sus protocolos, yo la he encontrado muy útil para testear protocolos creados con Twisted.
Usando Scapy desde la lína de comandos
Por supuesto, Scapy puede ser usado directamente desde la línea de comandos y realizar cualquier operación que deseemos con él. Podemos desde fabricar un paquete desde cero hasta hacer un sniff de los paquetes que circulan por una interfaz determinada o realizar un dump de paquetes.
sniff(iface="venet0", prn=lambda x: x.show())
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 52
id= 41246
flags= DF
frag= 0L
ttl= 52
proto= tcp
chksum= 0xd033
src= XX.XX.XX.XXX
dst= XXX.XXX.XXX.XXX
\options\
###[ TCP ]###
sport= 1538
dport= ssh
seq= 2503964889
ack= 491526350
dataofs= 8L
reserved= 0L
flags= A
window= 65535
chksum= 0x545
urgptr= 0
options= [('NOP', None), ('NOP', None), ('Timestamp', (92259702, 4229204656))]
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x10
len= 1284
id= 65322
flags= DF
frag= 0L
ttl= 64
proto= tcp
chksum= 0x6147
src= XXX.XXX.XXX.XXX
dst= XX.XX.XX.XXX
\options\
Las posibilidades de uso directamente desde la consola Python que el comando scapy
nos proporciona son prácticamente ilimitadas y podemos sacarle mucho jugo testeando nuestros desarrollos al nivel de abstracción que necesitemos en cada momento y de forma sencilla.
Por supuesto, también podemos usar scapy como librería e incluirla en nuestros propios proyectos para generar cualquier tipo de herramienta de diagnóstico de red que se nos ocurra, recomiendo leer la web oficial del proyecto aunque solo sea por curiosidad. Con scapy no testear nuestros sockets es sencillamente inaceptable.
Más información | Página web oficial de Scapy