1

ユーザーが接続しているすべてのネットワーク名と、そのネットワーク上のコンピューターの IP アドレスのリストを取得する必要があります。NetworkInformation.GetConnectionProfiles() を使用してネットワーク名のリストを取得でき、NetworkInformation.GetHostNames() を使用して IP アドレスのリストを取得できますが、2 つのリストを関連付ける方法がわかりません。NetworkAdapters 経由だと思っていましたが、それらの ID は 2 つの異なる呼び出しで異なります。

誰もこれを行う方法を知っていますか?

更新: 明確にするために、Windows 8 の Metro アプリでこれを行う方法を尋ねています。

更新 2: Release Preview のバグであることが判明しました。RTM に切り替えたので、既存のコードを一切変更することなく、すべてが機能しました。

4

2 に答える 2

1

編集: ちょうどこれを見つけた.ローカル IP アドレスのクエリ は、よりクリーンな方法のように見えます。好きなのを選びな...

私は刺すつもりです...うまくいけば、あなたを近づけます。テスト マシンに接続されているアダプターは 1 つしかありませんが、これは複数のアダプターを備えたマシンで動作すると思います (希望)。

// Get all profiles
var profiles = NetworkInformation.GetConnectionProfiles();

// filter out profiles that are not currently online 
var connected = from p in profiles where p.GetNetworkConnectivityLevel() != NetworkConnectivityLevel.None select p;

// find all hosts
var hosts = NetworkInformation.GetHostNames();

// find hosts that have an IP Address
var online = from h in hosts where h.IPInformation != null select h;

// Now loop there each online connection and match network adapter ids with hosts
foreach (var c in connected)
{
   var matches = from o in online where o.IPInformation.NetworkAdapter.NetworkAdapterId == c.NetworkAdapter.NetworkAdapterId select o;
}

ここでの唯一の問題は、1 つの物理アダプターが実際には IPv4 アドレスに対して 1 回、IPv6 アドレスに対して 1 回表示されることです。追加の手順を実行して、それらを相互に関連付ける必要があります。うまくいけば、これはあなたが探しているものです。

于 2012-08-31T00:04:45.653 に答える
0

c# や .net フレームワークについてはわかりませんが、Windows コマンド プロンプトからコマンド netstat -f が必要です。おそらくあなたはそれを解析できます。

アップデート

私はあなたが必要なものを理解していると思います。IP アドレスのリストがある場合は、Dns.GetHostEntry を使用してそれらをホスト名に変換できます。

C# の問題について説明しているこの記事をご覧ください。

于 2012-08-30T20:22:17.160 に答える