systemadmin.es > Redes > Captura completa con tcpdump

Captura completa con tcpdump

El tcpdump, junto con el strace, son las dos grandes herramientas para la solución de problemas. Veremos algunas opciones útiles del tcpdump para obtener las trazas completas.

tcpdump sin parámetros hace el dump de la primera interfaz de red, por lo que si nos interesa otra debemos usar el parámetro -i:

# tcpdump -i eth1
tcpdump: WARNING: eth1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
(...)

Entre los mensajes que nos encontramos veremos que hace una traducción DNS, por lo que aún genera más tráfico. Para evitar eso se pueden usar los parámetros -n y -nn.

Sin los parámetros veriamos:

# tcpdump -i eth0
(...)
11:38:26.958407 IP esturion.ssh > croscat.nmasoverip: P 365848:365996(148) ack 1613 win 63784

Con una n veriamos que no traduce a nombre las IPs pero si los puetos:

# tcpdump -ni eth0
(...)
11:38:36.926776 IP 10.7.1.2.ssh > 10.20.0.10.nmasoverip: P 336072:336220(148) ack 1353 win 63784

Mientras que con las dos n no traduciria ni puertos ni IPs:

# tcpdump -nni eth0
(...)
11:40:37.529014 IP 10.7.1.2.22 > 10.20.0.10.1242: P 512584:512732(148) ack 2081 win 63784

Para especificar cierto tráfico podemos definir filtros, por ejemplo por puerto:

# tcpdump -nni eth0 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:45:02.504995 IP 172.3.0.10.4766 > 10.3.6.1.80: S 4104893615:4104893615(0) win 65535 <mss 1260,nop,nop,sackOK>
11:45:02.517029 IP 10.3.6.1.80 > 172.3.0.10.4766: S 504755464:504755464(0) ack 4104893616 win 5840 <mss 1460,nop,nop,sackOK>
11:45:02.508968 IP 172.3.0.10.4766 > 10.3.6.1.80: . ack 1 win 65535
11:45:02.511055 IP 172.3.0.10.4766 > 10.3.6.1.80: P 1:506(505) ack 1 win 65535
11:45:02.511067 IP 10.3.6.1.80 > 172.3.0.10.4766: . ack 506 win 6432

Si además queremos guardar la captura lo podemos hacer mediante la opción -w:

# tcpdump -nni eth0 'port 80' -w port80.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

El problema que nos encontraremos es que por defecto solo guarda un trozo del paquete (por defecto los primeros 96 bytes).

# strings port80.pcap
m[yq;
bHTTP/1.0 200 OK
Date: Mon, 29
l[yq;
b"http://systemadmin.es/xmlrpc.
[yq;
XIMd
k[yq;
r: el[3], vote_type: el[4] },
XI|d
j[yq;
admin.es -->
                        
  • Añadiendo el parámetro -s podemos indicar a tcpdump que capture todo el paquete:

    # tcpdump -nni eth0 'port 80' -w port80.pcap -s 0
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
    

    Lo podemos ver mediante strings:

    # strings port80.pcap
    |GET /search?sourceid=navclient-ff&features=Rank&client=navclient-auto-ff&googleip=O;null;197&ch=8e36362aa&q=info:http%3A%2F%2Fsystemadmin.es%2F HTTP/1.0
    Host: toolbarqueries.google.es
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 GoogleToolbarFF 3.1.20081010
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    

    Deja un comentario:

    XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>