Pergunta

Atualmente, estamos analisando a saída da solicitação ARP da linha 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, mas existe uma maneira de fazer isso usando uma função de biblioteca que não depende muito da interface da linha de comando nativa? O projeto está usando o libpcap atualmente.

Foi útil?

Solução

Em geral, isso dependerá do seu sistema operacional. Não há API padrão real para isso.

Supondo que você esteja no Linux, aberto e parse/proc/net/arp. O formato é semelhante ao da saída do comando ARP. Observe que você deve enviar um pacote para o IP em questão pelo menos uma vez recentemente para tê -lo na tabela ARP e, é claro, você não receberá nada fora do segmento local.

É fácil colocar um IP nesse cache - basta enviar um pacote UDP para ele em alguma porta não utilizada, por exemplo - depois a pesquisa até que apareça.

Outra alternativa seria usar um soquete bruto para criar e enviar seu próprio pacote ARP, mas isso é muito mais complexo :) Se você quiser seguir essa rota, estude o código -fonte para arping (Página está baixa hoje, mas o Repo Git está online), que também pode lhe dar um pouco mais de portabilidade usando bibliotecas independentes de plataforma como libpcap (mas requer root)

Outras dicas

Estou um pouco preocupado com o

Recuperar o endereço MAC do Host estrangeiro

parte da sua pergunta.

Espero que você esteja ciente de que você só recebe entradas na tabela ARP para máquinas na mesma rede. Se você se conectar a uma máquina através de um roteador, verá apenas o endereço MAC do roteador na tabela ARP. Portanto, não há como saber o Endereço Mac do host estrangeiro A menos que seja um host na mesma rede (sem roteadores envolvidos).

Portanto, a resposta é que é impossível para os hosts alcançados por meio de um roteador e, caso o host seja acessível na rede local, você pode usar apenas métodos de acesso específicos da plataforma, pois mesmo a saída do comando ARP pode diferir entre as plataformas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top