2012-11-01 4 views
6

Ich habe ein Problem beim Synchronisieren der "IP-Adresse und Beschreibung".Erhalte IP-Adresse und Adapterbeschreibung mit C#

Ziel ist es diese:

die IP-Adresse erhalten und was ist die Beschreibung?

Beispiel:

| Atheros Azx1234 Wireless Adapter | 

|192.168.1.55      | 

Aber das Ergebnis ist nicht das, was ich erwartet hatte ...

Dies ist mein Code frei fühlen, um zu versuchen ...

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()); 
      } 
     } 
    } 
} 

Wie kann ich das beheben dieses Problem?

+0

Ich habe Ihren Code versucht, und es funktioniert, können Sie das Problem näher erläutern? –

+0

Ich glaube nicht, dass ein Problem mit dem von Ihnen geposteten Code vorliegt. Ich habe es geschafft, meine lokale IP von jedem Netzwerkgerät zu bekommen, das auf meinem System funktioniert :) –

+0

Das Problem tritt auf, wenn wir einen multiplen Internetadapter haben. –

Antwort

12

Das Problem in Ihrem Code ist, dass Sie nicht die zugehörigen IP-Adressen für den angegebenen Adapter verwenden. Statt zu jedem Adapter Gebrauch alle IP-Adressen passend nur die IP-Adressen mit dem aktuellen Adapter zugeordnet:

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

Dies muss die Lösung sein, das ist es +1 –

+0

Vielen Dank für diese Antwort @hans ... –

+0

** @ Hans: Ich habe eine 2 Fragen für Sie 1. Wie können wir verhindern, dass eine Loopback-Adresse Vorschau in der Message-Box? 2. Wie kann ich deine Antwort akzeptieren? lol ** –

Verwandte Themen