Testeando nuestras aplicaciones de red con Scapy

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

Portada de Genbeta