Me ha pasado un montón de veces: resulta que tengo un aparato que se conecta a la red y no sé cuál es su dirección IP. En el pasado me dediqué a disparates como hacer un nmap muy amplio, explorar todos los rangos de IP’s privadas. Por suerte encontré un sistema bastante fructífero y se los paso para que lo puedan anotar:
tcpdump -ennqti [INTERFACE] \( arp or icmp \) -xX | grep [MAC-ADDRESS]
La idea es hacer un dump de tcp, filtrando arp o icmp para que cuando el aparato pregunte por alguna dirección de destino al stack ARP nos enteremos a qué dirección quiere llegar –un gateway o un servidor de conexión generalmente– y desde qué dirección lo pide.
Un ejemplo de un teléfono IP Grandstream que me había quedado por ahí:
root@nexus:~# tcpdump -ennqti eth0 \( arp or icmp \) -xX | grep 00:0b:82:0d:32:90 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 00:0b:82:0d:32:90 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has 10.1.1.1 tell 10.1.1.160, length 46 00:0b:82:0d:32:90 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has 10.1.1.1 tell 10.1.1.160, length 46 00:0b:82:0d:32:90 > ff:ff:ff:ff:ff:ff, ARP, length 60: Request who-has 10.1.1.1 tell 10.1.1.160, length 46
Aquí podemos ver que la dirección MAC que buscamos está haciendo un pedido broadcast para encontrar a un gateway en la dirección 10.10.1.1 y que la dirección que tiene es la 10.1.1.160. Muy lindo, lo tenemos.
Un detalle muy importante: si el aparato encuentra la dirección con la que quiere comunicarse y no estamos en el ruteo no vamos a ver ninguna comunicación.