我需要获取用户连接到的所有网络名称列表以及该网络上计算机的IP地址。我可以使用NetworkInformation.GetConnectionProfiles()获取网络名称列表,我可以使用NetworkInformation.GetHostNames()获取IP地址列表,但我无法弄清楚如何关联这两个列表。我认为这将是通过NetworkAdapters,但两个不同的调用之间的ID是不同的。
有谁知道怎么做?
更新:只是为了澄清,我在Windows 8上的Metro应用程序中询问如何执行此操作。
更新2:事实证明这是Release Preview中的一个错误。现在我们已经切换到RTM,所有工作都没有对现有代码进行单一更改。
答案 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#中的问题。