Testeando nuestras aplicaciones de red con Scapy
Oscar Campos
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