Pregunta

Actualmente estamos analizando la salida de solicitud arp desde la línea de comando.

string cmd = "arp -n ";
cmd.append(ipaddress);
cmd.append(" | grep ");
cmd.append(ipaddress);
fgets( line, 130, fp);
fgets( line, 130, fp);
ret.append(line);
 ...

Funciona, pero ¿hay alguna manera de hacerlo usando una función de biblioteca que no dependa tanto de la interfaz de línea de comando nativa? El proyecto está usando libpcap actualmente.

¿Fue útil?

Solución

En general, esto dependerá de su sistema operativo. No hay una API estándar real para esto.

Suponiendo que está en Linux, abra y analice / proc / net / arp. El formato es similar al de la salida del comando arp. Tenga en cuenta que debe enviar un paquete a la IP en cuestión al menos una vez recientemente para tenerlo en la tabla ARP y, por supuesto, no obtendrá nada fuera de su segmento local.

Obtener una IP en este caché es bastante fácil: simplemente envíele un paquete UDP en algún puerto no utilizado, por ejemplo, luego realice una encuesta hasta que aparezca.

Otra alternativa sería utilizar un socket sin procesar para crear y enviar su propio paquete arp, pero eso es mucho más complejo :) Si desea seguir esta ruta, estudie el código fuente de arping (la página ha caído hoy, pero el git repo está en línea), lo que también podría brindarle un poco más de portabilidad al usar platform-independent-ish bibliotecas como libpcap (pero requiere root)

Otros consejos

Estoy un poco preocupado por el

  

recuperar la dirección MAC del host extranjero

parte de tu pregunta.

Espero que sepa que solo obtiene entradas en la tabla ARP para máquinas en la misma red. Si se conecta a una máquina a través de un enrutador, solo verá la dirección MAC de los enrutadores en la tabla ARP. Por lo tanto, no hay forma de conocer la dirección MAC del host extranjero a menos que sea un host en la misma red (sin enrutadores involucrados).

Entonces, la respuesta es que es imposible para los hosts a los que se llega a través de un enrutador y en caso de que el host sea accesible en la red local, puede usar solo métodos de acceso específicos de la plataforma, ya que incluso la salida del comando arp puede diferir entre plataformas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top