私がサーバーにバインドされたIPアドレスのリストを取得するために、Windows 2003の下にうまく働いたいくつかの既存のコードを持っている:"skipassource"アドレスを含むWindows 2008および.NETのシステムIPアドレスのリストを取得するには?
foreach (IPAddress addr in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
{
// Code here to act on each address
}
私たちのWindows 2008サーバー上でこのコードを実行すると、それは1つのIPアドレスのみを返します。 。さらに調査すると、マシンがリッスンしている残りのIPアドレスのすべてが、netsh int ipv4 add address
コマンドを使用して追加され、skipassource=true
フラグを指定して追加されたようです。
クエリにこれらのアドレスを含める、つまりサーバー上のすべてのアドレスを返す方法はありますか?
(あなたは好奇心旺盛であればWindows 2008のは、「プライマリ」、それはそれは考えてあなたのIPアドレスのどちらかを決定することを可能にするネットワークで新しい動作を導入し、当社のアプリケーションの残りのため、skipassource=true
フラグが設定されている私たちに依存しています主を選択することが可能。Windowsの2008年にそれを行うための唯一の方法は、skipassource=true
として他のすべてのアドレスをマークすることです。)
編集この質問は、私は問題の周りに働いてきたように、今ちょうど、私の好奇心を満足させることです。上の私の元のコードは、サーバー上のすべてのIPを実行し、私が探していた特定のIPに一致するものが見つかったかどうかを調べるために使用されました。私は今、私が使用しているサーバがその特定のIPアドレス/ポートをリッスンするサービスをすでに実行しているかどうかを確認するので、IPのすべてをループする必要はありません。それでも、元の質問に答えがあるかどうか聞いてみたいと思います。
この問題を解決するために@aKzenTに感謝します。 Dns.GetHostEntry()
ではなく、すべてのIPにアクセスするためにNetworkInteface.GetAllNetworkInterfaces()
を使用します。
foreach (NetworkInterface netface in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation uni in netface.GetIPProperties().UnicastAddresses)
{
IPAddress addr = uni.Address;
// Code here to act on each address
}
}
あなたは.NETを使用してアドレスを追加するとき、真skipassource =を追加する方法を知っているだろうか?現在ManagementObjectを使用して新しいアドレスを追加しています – user815809
申し訳ありませんが、私はそれを行う方法に慣れていません。しかし、おそらくそれについての良い質問になります。 –
ここにお願いしますhttp://stackoverflow.com/questions/12973074/how-to-programmatically-set-skipassource-true-using-c-net – user815809