sniffer
Hace un tiempo vengo trabajando en un proyecto para reemplazar una aplicación que escucha en un puerto TCP y va respondiendo peticiones que le llegan para unos automatismos (no puedo dar muchos más datos…).

El caso es que el desarrollo del nuevo software (que estoy haciendo con Python twisted) se basa en hacer ingeniería inversa a lo que hay montado y aprender de las preguntas y respuestas. Para ello necesitaba capturar paquetes de forma transparente y que el sistema siguiese funcionando. ¡LINUX al rescate!

He montado un minipc industrial con 2 tarjetas de red con Debian. Para que sea transparente las 2 tarjetas de red se han configurado en un puente y conectado como se ve en el esquema de la izquierda, un cable al router y otro al equipo que recibía esas peticiones.

Este es el /etc/network/interfaces:

auto lo
iface lo inet loopback

iface eth0 inet manual
iface eth1 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0 eth1

Para entrar de manera remota, segura y desatendida tiene un VPN (eso es otra historia)…

El paquete que hace la captura de tráfico es tshark (wireshark en modo texto) con este script:

#!/bin/bash

cd /root/captures
sleep 30

while [ 1 ]; do
  sleep 10
  tshark -i br0 -b filesize:5000 -a files:20 \
  -w temp.pcap 'tcp port 8080' >/dev/null 2>&1 || true
done

Lo que hace es guardar 20 tramas de 5000 bytes de todo el tráfico que pasa por el puente de red y puerto 8080. Al estar en un bucle infinito el sniffer vuelve a cargar pasados 10 segundos.

Desde un equipo remoto (para que no se llene la tarjeta SD del minipc) se recogen los datos con rsync y se borra el contenido de la carpeta de capturas para analizarlos con más calma y offline con el interfaz gráfico de wireshark.

TRUCO, puedes buscar con rgrep la cadena que necesites en la carpeta de tramas, lo que devolverá en qué archivo de trama se encuentra esa cadena, luego con wireshark y búsqueda por bytes se puede encontrar el momento en el que se encontró y pulsar ‘Follow TCP Stream‘ para ver el diálogo completo en el que se encuentra la cadena buscada.

Eso es todo por hoy.

PD.- Gráfico hecho con GNOME dia.

Como hacer un sniffer hardware
Etiquetado en: