miércoles, 8 de mayo de 2013

Esnifando tráfico de red con tcpdump. Capturando tráfico

Instalo tcpdump

apt-get install tcpdump
Descargamos los ficheros de la práctica y comprobamos los mismos con file:
file em0.lpc sf1.lpc
Instalamos libpcap y tcpdump -sino lo está ya-
apt-get install tcpdump
Iniciamos las capturas con tcpdump, en este caso capturo un ping a ww.google.es
tcpdump -n -i eth2 -s 1515
si queremos capturar los datos en un fichero podríamos hacer:
tcpdump -n -i eth2 -s 1515 -w sf1.lpc

.lpc en este caso hace referencia a que es un fichero con formato libpcap.


Empleando TCPDUMP para leer datos de contenido almacenado

tcpdump -n -r sf1.lpc -c 4
con la opción "-c 4" indicamos que sólo queremos mostrar cuatro paquetes, la alternativa sería emplear more o less:
tcpdump -n -r sf1.lpc | more
para filtrar el tráfico según el tipo (udp, tcp,...)
tcpdump -n -r sf1.lpc -c 2 udp
tcpdump -n -r em0.lpc -c 8 tcp
Si queremos que nos muestre los números de secuencia absolutos en lugar de los relativos, debemos emplear el modificador "-S":
 tcpdump -n -r em0.lpc -c 8 tcp -S

Formato de la hora de captura

si empleamos el modificador -tttt nos mostrará la hora de captura en formato Coordinated Universal Time (UTC hora universal coordinada), sin él emplearemos la hora local.
También podemos emplear el modificador -tt que nos móstrará el número de segundos transcurridos desde la época UNIX (1/1/1970):

Mejora del detalle en la visualización de datos:

-v: permite mostrar información más detallada de los paquetes.
tcpdump -n -r em0.lpc -v -c 1 tcp
-e: mostrar el encabezado del nivel de enlace (p.e. Ethernet)
tcpdump -n -r em0.lpc -e -c 1 tcp
-X Muestra la notación en hexadecimal a al izquierda y en ASCCI a la derecha:
tcpdump -n -r em0.lpc -X -e -c 1 tcp

TCPDUMP y los filtros de paquetes BERKELEY

-host ip_del_host: muestra los paquetes que tengan como origen o destino dicha ip de host
-src ip_del_host: muestra los paquetes que tengan como origen dicho host
-src host ip_del_host: equivalente al anterior
-dst ip_del_host: muestra los paquetes que tengan como destino dicho host
-src net ip_de_red: muestra paquetes originados en la red indicada.
tcpdump -n -r sf1.lpc -c 2 host 172.27.20.3
tcpdump -n -r sf1.lpc -c 2 src 172.27.20.4
tcpdump -n -r sf1.lpc -c 2 src host 172.27.20.4
tcpdump -n -r sf1.lpc -c 2 dst 172.27.20.3
tcpdump -n -r sf1.lpc -c 2 src net 10.10.10
Se puede emplear también tcp, udp o icmp para especificar el protocolo, o incluso emplear el modificador "not" para mostrar todos menos el indicado, p.e. "not tcp".
tcpdump -n -r em0.lpc -c 2 tcp
tcpdump -n -r em0.lpc -c 2 not tcp
tcpdump -n -r sf1.lpc -c 2 icmp
tcpdump -n -r sf1.lpc -c 2 not icmp and not udp and not tcp
También podemos emplear el modificador "proto" seguido del número de protocolo que queramos para observar uno en concreto. Otros también poseen sus propias palabras reservadas como "arp"
tcpdump -n -r sf1.lpc -c 2 proto 6
tcpdump -n -r em0.lpc -c 2 not arp
tcpdump -n -r sf1.lpc -c2 tcp and dst port 22
tcpdump -n -r em0.lpc udp and src port 3736
Para comprobar los tipos de los paquetes ICMP podemos emplear el siguiente formato:
tcpdump -n -r sf1.lpc -c 2 'icmp[icmptype] != icmp-echo'
tcpdump -n -r sf1.lpc -c 2 'icmp[icmptype] != icmp-echo and   icmp[icmptype] != icmp-echoreply'