アプリケーション(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にバインドすると、プライマリで公開されますか?
この例が役立つと思います。
// 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アドレスを決定します(拡張すると、ネットワークインターフェイスも仮想または物理にできます)。
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("");
}
なぜ0.0.0.0にバインドしないのですか?
そのようにして、すべてのIPをリッスンします
おそらく0.0.0.0:8000
にバインドする必要があります。これにより、利用可能なすべてのIPアドレスで公開され、ユーザー/管理者が要求した場合にのみ特定のIPアドレスにバインドされます。
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());