[.NET Framework]Ottenere nomi dei computer in rete locale

venerdì 20 giugno 2008 - 15.19

gigi90 Profilo | Senior Member

Salve a tutti,
ho la necessità di ottenere una lista contenente i nomi dei computer in rete locale, quindi volevo sapere se potevate aiutarmi mostrandomi il metodo per fare ciò con il .Net Framework.

Grazie a tutti!!!!!

Gio83 Profilo | Newbie

Ciao,
Hai provato con la funzione DNS.getHostEntry(..)?
Questa funzione ritorna un IP se passi come parametro il nome del pc che ti interessa, dovrebbe funzionare anche il contrario passando un indirizzo IP.
Per ottenere i nomi dei pc puoi prelevare, dal risultato dell'operazione, l'attributo Aliases.
Ho provato solo ad ottenere gli IP passando i nomi, ma non il viceversa...
Spero di esserti stato d'aiuto

Gio83 Profilo | Newbie

Ciao,
Ho avuto modo di testare la funzione getHostEntry, il funzionamento per ottenere l'hostName di un pc associato ad un indirizzo IP è il sueguente:
String hostName=Dns.GetHostEntry("192.168.1.100").HostName;

gigi90 Profilo | Senior Member

Il problema è che non conosco gli indirizzi IP dei computer, e nemmeno i loro nomi.
A me servirebbe qualcosa che restituisce gli IP o i nomi dei computer presenti nella mia stessa rete locale.

Gio83 Profilo | Newbie

>Il problema è che non conosco gli indirizzi IP dei computer,
>e nemmeno i loro nomi.


>Il problema è che non conosco gli indirizzi IP dei computer,
>e nemmeno i loro nomi.

Una tipica rete locale con maschera 255.255.255.0 tutti i nodi collegati dovrebbero avere lo stesso indirizzo ip del tipo a.a.a.x con solo x variabile.
Pensavo che potresti provare a ricavare l'indirizzo della macchina su cui gira l'applicazione e spazzolare tutti gli indirizzi ip, cambiando l'ultimo numero, con l'istruzione getHostEntry.

Con l'istruzione:
IPAddress[] myIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
ottieni tutti gli indirizzi associati alla macchina locale, possono essere più d'uno (ad esempio uno per la rete locale ed uno l'indirizzo su internet), ho fatto qualche prova e sembra che l'indirizzo locale venga messo come primo elemeto dell'array myIp.

a questo punto puoi passare in rassegna tuttu gli indirizzi
String ipString= myIp[0].ToString(); int ind=ip.LastIndexOf("."); ip = ip.Substring(0, ip.LastIndexOf('.'))+"."; for (int i = 0; i < 255; i++) Console.writeLine(Dns.GetHostEntry(ip+i).HostName);

ho provato ad eseguire il codice, praticamente se trova il pc associato all'indirizzo ip restituisce il nome, altrimenti ritorna di nuovo l'indirizzo ip.
Purtroppo però l'esecuzione è molto lenta, a causa del fatto che deve interrogare 255 pc...

Una volta eliminato l'impossibile, quello che resta, per improbabile che sia, deve essere la verità (S.Holmes)

gigi90 Profilo | Senior Member

Visto che non è possibile altrimenti, la tua può essere una soluzione, anche se non la migliore...la cosa buona sarebbe qualche funzione che permette di ottenere gli esatti IP collegati, senza effettuare un ciclo dei possibili IP alla ricerca di quello esistente, poichè e vero che di solito una normale rete locale aziendale è composta da meno di 255 pc(quindi con una subnet mask 255.255.255.0), ma potrebbe essere possibile che sti computer hanno IP non omogeneo del tipo:

1 PC 62.148.25.1
2 PC 62.149.3.6
3 PC 68.148.22.5
ecc.

mica posso fa quattro cicli da 255 uno per ogni gruppo di IP?!?!
Sarebbe troppo lungo!!!

Fammi sapere se trovi qualche metodo di qualche classe che restituisce gli esatti IP, ci conto!!!!!!!!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5