如何将IP地址与Windows 8 Metro中的网络名称相关联

时间:2012-08-30 20:05:27

标签: c# windows-8 microsoft-metro .net-4.5

我需要获取用户连接到的所有网络名称列表以及该网络上计算机的IP地址。我可以使用NetworkInformation.GetConnectionProfiles()获取网络名称列表,我可以使用NetworkInformation.GetHostNames()获取IP地址列表,但我无法弄清楚如何关联这两个列表。我认为这将是通过NetworkAdapters,但两个不同的调用之间的ID是不同的。

有谁知道怎么做?

更新:只是为了澄清,我在Windows 8上的Metro应用程序中询问如何执行此操作。

更新2:事实证明这是Release Preview中的一个错误。现在我们已经切换到RTM,所有工作都没有对现有代码进行单一更改。

2 个答案:

答案 0 :(得分:1)

编辑:刚发现这个... Query Local IP Address看起来更干净。随便挑选......

我要去刺...希望能让你接近。我只有一个适配器连接在我的测试机器上,但我认为(希望)这可以在一台有多个适应器的机器上工作。

// 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;
}

这里唯一的问题是单个物理适配器实际上会显示一次其IPv4地址,一次显示其IPv6地址。您将不得不采取额外步骤并将它们关联在一起。希望这就是你要找的东西。

答案 1 :(得分:0)

好吧,我不知道c#或.net框架,但是从Windows命令提示符,命令netstat -f就是你需要的。也许你可以解析它。

<强>更新

我想我明白你需要什么。如果您有IP地址列表,可以使用Dns.GetHostEntry将它们转换为主机名

查看this article,其中讨论了C#中的问题。