2010-10-26 18 views
5

Come posso ottenere tutti gli indirizzi IP ei nomi host associati in una LAN?Elenco di tutti gli host sulla rete LAN

+0

Qual è la tua piattaforma (OS)? Vuoi C++ o Cocoa? –

+0

@Steve: la mia piattaforma è Mac OS X 10.6 e uno sviluppatore di cacao. Ma sto usando il protocollo RFB. E devo usare quei protocolli che sono scritti in linguaggio C/C++. – boom

+0

Quindi una soluzione C/C++ su OS X potrebbe funzionare per voi? –

risposta

0

Per ottenere l'elenco di interfacce e indirizzi IP, utilizzare getifaddrs().

Ricerca per le interfacce con ifa_addr->sa_family == AF_INET

L'indirizzo IP è in sin_addr.s_addr.

È quindi possibile utilizzare gethostbyaddr() per cercare il nome DNS per quell'indirizzo IP.

Aggiornamento:

E 'stato mi ha fatto notare che il PO è stato probabilmente chiedendo di scoprire altri host, piuttosto che gli indirizzi delle interfacce sulla macchina locale.

Non esiste un modo affidabile per scoprire altre macchine sulla rete locale, ma ci sono un paio di trucchi.

  • metodo Ping: Utilizzare l'utilità ping (o un equivalente programmatico) per eseguire il ping l'indirizzo di broadcast locale, poi vedere chi risponde. L'indirizzo di trasmissione può essere trovato elencando le interfacce come mostrato sopra. Credo che ICMP non richieda l'accesso come root in OSX. Si noti che molti sistemi possono avere il ping ICMP disabilitato o firewallato, in modo da ottenere solo risposte da quelle non invisibili.

  • metodo ARP: controllare la cache ARP del sistema per vedere quali indirizzi IP sono stati recentemente attivati. Questo mostrerà solo i sistemi che hanno trasmesso pacchetti sullo stesso segmento di rete negli ultimi minuti.

Entrambi i metodi possono essere bloccati da firewall, router e persino interruttori, quindi i bordi esatti della "LAN" possono essere piuttosto stretti. Entrambi i metodi possono essere implementati a livello di codice, ma potrebbe essere più semplice e più portabile per chiamare semplicemente i comandi della riga di comando ping o arp.

+0

La domanda suona più come l'autore vuole enumerare tutti i diversi host sulla LAN, non solo le informazioni sugli uplink degli attuali host. – jdizzle

+0

Forse. Ora capisco che la domanda originale non era specifica per la piattaforma, quindi probabilmente hai ragione. –

Problemi correlati