2012-11-01 22 views
6

Ho riscontrato un problema durante la sincronizzazione di "Indirizzo IP e descrizione".Ottieni indirizzo IP e descrizione adattatore utilizzando C#

L'obiettivo è questo:

ottenere l'indirizzo IP e che cosa è la descrizione?

Esempio:

| Atheros Azx1234 Wireless Adapter | 

|192.168.1.55      | 

Ma il risultato non è quello che mi aspettavo ...

Questa è sentirsi liberi di provare il mio codice ...

private void button1_Click(object sender, EventArgs e) 
{ 
    NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 
    IPHostEntry host; 
    host = Dns.GetHostEntry(Dns.GetHostName()); 

    foreach (NetworkInterface adapter in interfaces) 
    { 
     foreach (IPAddress ip in host.AddressList) 
     { 
      if ((adapter.OperationalStatus.ToString() == "Up") && // I have a problem with this condition 
       (ip.AddressFamily == AddressFamily.InterNetwork)) 
      { 
       MessageBox.Show(ip.ToString(), adapter.Description.ToString()); 
      } 
     } 
    } 
} 

Come posso risolvere il problema questo problema?

+0

Ho provato il codice e che sta funzionando, si può spiegare il problema in dettaglio? –

+0

Non penso che ci sia un problema con il codice che hai postato. Sono riuscito a ottenere il mio IP locale da ciascun dispositivo di rete che funziona sul mio sistema :) –

+0

il problema si verifica quando abbiamo un adattatore Internet multiplo .. –

risposta

12

Il problema nel codice è che non si utilizzano gli indirizzi IP associati per l'adattatore specificato. Invece di corrispondenza tutti gli indirizzi IP ad ogni adattatore uso solo gli indirizzi IP associati con l'adattatore di corrente:

NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 
foreach (var adapter in interfaces) 
{ 
    var ipProps = adapter.GetIPProperties(); 

    foreach (var ip in ipProps.UnicastAddresses) 
    { 
     if ((adapter.OperationalStatus == OperationalStatus.Up) 
     && (ip.Address.AddressFamily == AddressFamily.InterNetwork)) 
     { 
      Console.Out.WriteLine(ip.Address.ToString() + "|" + adapter.Description.ToString()); 
     } 
    } 
} 
+0

Questa deve essere la soluzione, questo è il +1 –

+0

Grazie per questa risposta @hans ... –

+0

** @ Hans: Ho 2 domande per voi 1 ° come possiamo evitare che un indirizzo Loopback venga visualizzato in anteprima nella finestra del messaggio? 2 ° Come posso accettare la tua risposta? lol ** –