【发布时间】:2011-10-19 14:18:50
【问题描述】:
我正在尝试获取活动网络适配器的 IP 地址,以便避开当前未连接的虚拟和其他 VPN 适配器。
在我当前的笔记本电脑上,以下代码返回 3 个 IP V4 地址,我不知道如何从该列表中获取“真实的”正在使用的 IP 地址。
IPAddress[] ipV4Addresses = Array.FindAll(
Dns.GetHostEntry(String.Empty).AddressList,
a => a.AddressFamily == AddressFamily.InterNetwork);
查看 MSDN 文档here,我想也许我是在正确的轨道上。有没有人成功获得每个适配器的 IP 地址列表?如果是这样,请分享您的智慧。谢谢!
此时这都是原型。我有这段代码(感谢 SO!),并且 string[] netAddresses 始终为空,即使计算机连接到网络并且 IP 地址正常。
string wmiQuery = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL";
ManagementObjectSearcher moSearch = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection moCollection = moSearch.Get();
foreach (ManagementObject mo in moCollection)
{
Console.WriteLine("{0} is {1}", mo["Name"], mo["NetConnectionStatus"]);
string[] netAddresses = (string[])mo["NetworkAddresses"];
if (netAddresses != null)
{
foreach (string netAddress in netAddresses)
{
Console.WriteLine("\tnet addresses:");
Console.WriteLine("\t\t{0}", netAddress);
}
}
}
【问题讨论】:
-
定义“真实”。任何或所有 IPv4 地址都可以同时使用。如果您的 PC 有两个或更多“真实”网卡怎么办?
-
@Gaz,对于非技术术语“真实”感到抱歉。我的意思是当前插入并用于通过浏览器与 Internet 通信的 NIC。我知道一次可能会插入多个 NIC,但在我们的用户群中,如果有的话,这将是极其罕见的。
标签: c# networking wmi