2

.net でアクティブな IPAddress を取得しようとしています。この場合は、イーサネット アダプターに関連付けられたアドレスです。

これで、現在マシンに割り当てられている IP のリストを取得できることがわかりました。

IPHostEntry entry = Dns.GetHostEntry(Dns.GetHostName());

そして、次を使用して、さまざまなネットワーク インターフェイスに関する多くの情報を取得できることを知っています。

NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();

NetworkInterfaceType enum を使用して、これらのインターフェイスのどれが私のイーサネット インターフェイスであるか、インターフェイスが「アップ」しているかどうかを判断できますが、この NetworkInterface を対応する IPAddress に関連付ける方法が見つからないようです。NetworkInterface クラス内からは、エニーキャスト アドレスやゲートウェイ アドレスなどを取得する方法しかわかりませんが、自分のイーサネット IP を絞り込むのに役立つものは何もありません。

単純か複雑かを問わず、これを行う方法を知っている人はいますか?

編集: たとえば、コマンド ラインの netstat または tracert は、すべてのアクティブなネットワーク接続を提供できます。.net がこれに似たものを持っていないのは奇妙に思えますが、コマンドラインの結果を解析する必要はまったくないようです。GetBestInterface() のようなものは便利に思えますが、特定の他の IP にアクセスできる IP でのみ返されます。繰り返しますが、あまり多用途ではありません。

C# を使用してアクティブな IPAdresses を取得する方法が他にない場合は、コマンド ラインを使用しますが、実際には、一般的なプログラミング言語で実行できるはずのことのように思えます。実際、誰かが C++ または C ソリューションを持っていれば、それを私の C# アプリに接続することもできます。

4

1 に答える 1

2

したがって、ここで役立つ統計は、特定のインターフェイスで受信した合計バイト数です。

NetworkInterface.GetIPv4Statistics().BytesReceived

これを以下と組み合わせて使用​​ します。

NetworkInterface.OperationalStatus

現在「稼働」しているかどうか、および過去にパケットを受信したかどうかがわかります。無線の場合、OperationalStatus は現在接続されていない場合は「Down」ですが、イーサネットの場合はケーブルが差し込まれていない場合でも「Up」のままです。 IPAddressを提供しますが、問題は、接続されていないためにそのアドレスを使用しようとすると処理能力が無駄になるかどうかを知りたいということです。

最後に、そのアドレスをネットワークに関連付けるのは非常に簡単です。

UnicastIPAddressInformationCollection ipc = NetworkInterface.GetIPProperties().UnicastAddresses;

このようにして、特定の NetworkInterface にアクセスして、その IP アドレスを取得します。これは通常、IPv4 と IPv6 の両方のアドレスを返します。

于 2012-09-14T04:55:59.063 に答える