web-dev-qa-db-ja.com

マシン上のすべてのIPアドレスを取得する

アプリケーション(C#NETコンソールアプリ)が実行されているマシンに接続されているすべてのIPアドレスを取得するにはどうすればよいですか? WCFサービスをプライマリIPアドレスにバインドし、完全なIPアドレスリストのリストを返す必要があります。

using System.Net;

string myHostName = Dns.GetHostName().ToString();
string ipAddress = Dns.Resolve(HostName).AddressList[0].ToString();

これは、現在私がプライマリIPアドレスを取得するために使用しているものですが、残りのIPアドレスを取得する方法を理解できません。

WCFサービスをlocalhost:8000にバインドすると、プライマリで公開されますか?

21
user470760

この例が役立つと思います。

// Get Host name
String strHostName = Dns.GetHostName();

// Find Host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Enumerate IP addresses
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
    ....
}

編集:

「「プライマリ」IPアドレスのようなものはありません。

ルーティングテーブルは、宛先IPアドレスに応じて使用される外向きのIPアドレスを決定します(拡張すると、ネットワークインターフェイスも仮想または物理にできます)。

9

DNSバリアントはネットワーク全体で機能しますが、1つのDNSエントリは多くのIPアドレスを持つことができ、1つのIPアドレスは多くのDNSエントリを持つことができます。さらに重要なのは、アドレスがDNSエントリにバインドされている必要がないことです。

ローカルマシンの場合、これを試してください:-

  foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
  {
    Console.WriteLine("Name: " + netInterface.Name);
    Console.WriteLine("Description: " + netInterface.Description);
    Console.WriteLine("Addresses: ");
    IPInterfaceProperties ipProps = netInterface.GetIPProperties();
    foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
    {
      Console.WriteLine(" " + addr.Address.ToString());
    }
    Console.WriteLine("");
  }
49
user159335

なぜ0.0.0.0にバインドしないのですか?
そのようにして、すべてのIPをリッスンします

6
Fredrik Leijon

おそらく0.0.0.0:8000にバインドする必要があります。これにより、利用可能なすべてのIPアドレスで公開され、ユーザー/管理者が要求した場合にのみ特定のIPアドレスにバインドされます。

1
Cosmin Prund
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
1
StefanE