Domanda

Attualmente stiamo analizzando l'output della richiesta arp dalla riga di 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);
 ...

Funziona, ma c'è un modo per farlo usando una funzione di libreria che non dipenderà molto dall'interfaccia della riga di comando nativa? Il progetto utilizza attualmente libpcap.

È stato utile?

Soluzione

In generale, questo dipenderà dal tuo sistema operativo. Non esiste un'API standard reale per questo.

Supponendo di essere su Linux, aprire e analizzare / proc / net / arp. Il formato è simile a quello dell'output del comando arp. Nota che devi inviare un pacchetto all'IP in questione almeno una volta di recente per averlo nella tabella ARP, e ovviamente non otterrai nulla al di fuori del tuo segmento locale.

Ottenere un IP in questa cache è abbastanza facile - basta inviargli un pacchetto UDP su una porta inutilizzata, per esempio - quindi sondare fino a quando non appare.

Un'altra alternativa potrebbe essere quella di utilizzare un socket raw per creare e inviare il proprio pacchetto arp, ma è molto più complesso :) Se vuoi seguire questa strada, studia il codice sorgente per arping (la pagina non è disponibile oggi, ma git repo è online), il che potrebbe anche darti un po 'più di portabilità usando platform-independent-ish librerie come libpcap (ma richiede root)

Altri suggerimenti

Sono un po 'preoccupato per

  

recupera l'indirizzo MAC dell'host straniero

parte della tua domanda.

Spero che tu sia consapevole di ottenere solo voci nella tabella ARP per macchine sulla stessa rete. Se ti connetti a una macchina tramite un router, vedrai solo l'indirizzo MAC dei router nella tabella ARP. Quindi non c'è modo di conoscere l ' indirizzo MAC dell'host straniero se non è un host sulla stessa rete (nessun router coinvolto).

Quindi la risposta è che è impossibile per gli host che vengono raggiunti tramite un router e nel caso in cui l'host sia raggiungibile sulla rete locale è possibile utilizzare solo metodi di accesso specifici della piattaforma, poiché anche l'output del comando arp può differire tra piattaforme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top