2012-11-01 11 views
6

「IPアドレスと説明」の同期に問題があります。C#を使用してIPアドレスとアダプタの説明を取得する

目的はこれです:

は、IPアドレスを取得し、説明は何ですか?

例:

| Atheros Azx1234 Wireless Adapter | 

|192.168.1.55      | 

しかし、結果は私が期待したものではありません...

これは私のコードですが、試して気軽...

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

私はどのように修正することができますこの問題?

+0

を、あなたは、より詳細に問題を説明することができますか? –

+0

あなたが投稿したコードに問題があるとは思わない。私は私のシステム上で動作している各ネットワークデバイスから自分のローカルIPを取得することができました:) –

+0

複数のインターネットアダプタがあるときに問題が発生します。 –

答えて

12

コードの問題は、指定されたアダプタに対応するIPアドレス を使用しないことです。代わりに、すべてのアダプタ 使用に現在のアダプタに関連付けられたIPアドレスのみすべてのIPアドレスを一致させる:私はあなたのコードを試してみました、それが働いている

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

これは解決策でなければなりません+1 –

+0

この回答をありがとう@hans ... –

+0

** @ハンス:私はあなたのために2つの質問を持っています1stメッセージボックスでのプレビューからループバックアドレスを防ぐ方法を教えてください。第二に私はあなたの答えを受け入れることができますか? lol ** –