22 de Marzo, 2005

tcpdump y tramas 802.1d config

Vaya tela. Recordaba haberlo hecho, pero se me había olvidado cómo :(. Busco en google y me encuentro mi propia respuesta explicando el tema :D.

Resulta que cuando hacemos un tcpdump(8) sobre un medio compartido, probablemente veremos demasiada información para lo que en realidad necesitamos.

Una solución es ver solo lo que queremos:

# tcpdump -i wi0 port ssh
tcpdump: listening on wi0
13:55:36.183957 10.1.3.115.1079 > clubradio.nodo8.elxwifi.ssh:
 P 2815704453:2815704489(36) ack 1898757477 win 63412 (DF)
13:55:36.185560 10.1.3.115.1079 > clubradio.nodo8.elxwifi.ssh:
 P 36:72(36) ack 1 win 63412 (DF)
...

Así por ejemplo vemos solo las tramas que estén referidas al puerto del servicio SSH (para la interfaz wi0, que en mi caso es la tarjeta inalámbrica).

Mi problema se planteaba cuando quería eliminar cosas, porque era más factible que indicar todo lo que sí quería ver, y además esas cosas eran del nivel de enlace: no hay puerto por el que filtrar y hay que referirse a protocolos.

En concreto se trataba de tramas 802.1d config, que son tramas que emplean específicamente los bridges.

En elxwifi hay algún que otro puente. Es un recurso habitual cuando tenemos problemas de cobertura. Se instala en la azotea un punto de acceso que pueda actuar de cliente, y éste hace un bridge para unir la red inalámbrica 802.11b con la red 802.3 (Ethernet) que se conecta mediante un cable RJ-45 que baja hasta el PC cliente.

También se emplea como sustitutivo de una segunda tarjeta de red para conectar un punto de acceso a otro y así formar una red con estos elementos.

Estas tramas pueden llegar a ser abundantes, así que vamos a intentar eliminarlas. En teoría podemos indicarle protocolo a filtrar, pero no existe un nombre simbólico para este caso (podría ser "802.1d"), así que tendremos que referirnos a él empleando su número. ¿Cuál es? Ni idea :).

Con la opción -e podemos obtener información extra para cada trama (la cabecera del nivel de enlace):

# tcpdump -e -i wi0
tcpdump: listening on wi0
14:22:15.892062 0:90:4b:23:8b:13 0:40:f4:b2:9d:a arp 42: arp reply[...]
...

En este ejemplo vemos una trama arp, que sí tiene nombre simbólico. Vemos por orden: hora, origen, destino y protocolo (arp).

En el caso de las tramas conflictivas tendríamos un 0026 como nombre de protocolo. No pongo ese mismo ejemplo porque Rubén añadió una tarjeta de red más a club radio (elxwifi), y ya no me complica las cosas con esas tramas :). Pero este sería el mecanismo para obtener el número de protocolo.

Ahora solo tenemos que indicar que no queremos ver las tramas asociadas:

# tcpdump -i wi0 not ether proto 0x0026

De esa forma nos referimos al protocolo del nivel de enlace (se indica ethernet).En el caso de arp, u otro protocolo con nombre, solo sería necesario indicar:

# tcpdump -i wi0 not arp

La página del manual de tcpdump es bastante completa, aunque también resulta algo confusa en algunas partes. Siempre me toca consultar la documentación durante un buen rato antes de hacer nada, así que al menos con esta anotación dejo cubierto este caso especial de filtrado.

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.