2010-01-03 15 views
9

Sto scrivendo un programma in cui ci si connette, per vari motivi, ad altri computer in una LAN. Tuttavia, piuttosto che dover inserire l'indirizzo IP per più computer (un dolore nel sedere), mi chiedevo se c'è un modo per elencare gli indirizzi IP di tutti i computer in una LAN. Ho cercato tutto il giorno e finora non ho trovato nulla di adatto. È perché non esiste nulla di simile? Grazie in anticipo.Elencare l'indirizzo IP di tutti i computer connessi a una singola LAN

MODIFICA: Sembrerebbe che con le molte visualizzazioni che questo post sta ottenendo, dovrei pubblicare la mia soluzione reale. In generale, le convenzioni di denominazione per gli indirizzi IP dei computer su una LAN sono le stesse. ad esempio 192.168.2. *, * viene sostituito con qualsiasi numero valido. Il mio programma rileva l'indirizzo IP, lo visualizza all'utente, quindi richiede i primi 3 blocchi di IP. Quindi esegue la scansione sequenziale fino a 200 nella convenzione di denominazione IP specificata eseguendo il ping e in attesa di una risposta. Nessuna risposta, nessun computer. Può fare tutto ciò che puoi fare con un IP una volta che sa di avere un computer dietro.

+0

È possibile ottenere la subnet e scorrere gli indirizzi disponibili per eseguirne il ping. Ma questo non sarebbe di aiuto per quelli che sono appena spenti. Se si ha accesso, è possibile consultare i file di lease DHCP –

+1

'ARPing', come descritto da Jason, è l'unica soluzione cross-platform e firewall-difendibile. L'approccio WNetEnumResource() di BlueRaja è ragionevole se sei limitato al boxen di Windows. Gli approcci scanning/nmap hanno troppi draghi con firewall basati su host. Non c'è un richiamo magico/una chiamata API. L'API di iphelper SendARP() è probabilmente la scelta migliore: http://msdn.microsoft.com/en-us/library/aa366358%28VS.85%29.aspx –

+0

Perché non 254? (255 in subnet più grandi) – Deanna

risposta

6

Non troverai nulla di più affidabile degli indirizzi ping o arping nello stesso sottoinsieme. Ho implementato questo per un determinato software nel corso del mio primo stage e, l'ultima volta che ho controllato (per essere onesti era diversi anni fa), questo è quello che stavano ancora usando per questa funzionalità. Prendo questo per significare che non hanno trovato niente di meglio.

Non è difficile trovare il codice sorgente per questi e tradurli in C#. ping, arping. In alternativa, è sufficiente passare il comando a un prompt dei comandi ed eseguire ping e quindi analizzare i risultati.

+0

In realtà, 'System.Net.NetworkInformation.Ping' dovrebbe fare il trucco. Non c'è bisogno di tradurre nulla da C. – GeReV

7

1) Leggere la maschera di sottorete e calcolare tutti gli indirizzi IP nella subnet mask in cui ci si trova. Quindi è possibile eseguire ping ICMP (ping standard) o ping ARP per elencare tutti gli indirizzi IP validi. Il ping ARP è molto affidabile in un'impostazione di sottorete.

2) È possibile Nmap per elencare tutti gli host

nmap -nsP 192.168.10.1/254 | grep ^Host 
0

Si può solo guardare la maschera di sottorete IP e sulla scheda di rete e ping ogni indirizzo? Chiunque risponda può essere interrogato per vedere se ha tutto il necessario per la connessione.

2

Qualsiasi strumento di rilevamento host può aiutarti qui. In particolare, Nmap ti darà queste informazioni anche se potrebbe essere eccessivo in questa situazione. Google per "ping scan" e dovresti ottenere alcuni risultati utili.

+3

(+1) usa nmap tramite una chiamata di processo e analizza i risultati. –

2

Vedere WNetOpenEnum() e WNetEnumResource(), here.

Problemi correlati