检测哪个网络接口正在使用
本文关键字:网络接口 检测 | 更新日期: 2023-09-27 18:12:24
我使用以下代码获取本地计算机的IPv4网关地址
var interfaces = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
var wifi = interfaces[3];
var gatewayAddresses = wifi.GetIPProperties().GatewayAddresses;
var gateway = gatewayAddresses[0].Address.ToString();
IPv4GatewayValueLabel.Text = gateway;
工作正常,但我手动选择接口(激活的接口)。我想用程序来选择。
我做了一些调试。NetworkInterface.GetAllNetworkInterfaces()
返回一个接口列表。在我的例子中,有7个。我找了一个属性来区分活动接口和其他接口,找到了OperationalStatus
,但它不是很可靠。
我用我的手机(wifi热点)连接到互联网,这是我得到的接口列表:
0:
Description "Microsoft Wi-Fi Direct Virtual Adapter"
OperationalStatus Down
1:
Description "Bluetooth Device (PAN)"
OperationalStatus Down
2:
Description "Realtek PCIe FE Family Controller"
OperationalStatus Down
3:
Description "Dell Wireless 1701 802.11b/g/n"
OperationalStatus Up
4:
Description "Software Loopback Interface 1"
OperationalStatus Up
5:
Description "Microsoft ISATAP Adapter"
OperationalStatus Down
6:
Description "Teredo Tunneling Pseudo-Interface"
OperationalStatus Down
可以看到,有两个接口的Up
值。此外,我不确定这个列表是否固定,所以这次我使用usb连接,接口列表改变了一点:
0:
Description "SAMSUNG Mobile USB Remote NDIS Network Device"
OperationalStatus Up
1:
Description "Microsoft Wi-Fi Direct Virtual Adapter"
OperationalStatus Down
2:
Description "Bluetooth Device (PAN)"
OperationalStatus Down
3:
Description "Realtek PCIe FE Family Controller"
OperationalStatus Down
4:
Description "Dell Wireless 1701 802.11b/g/n"
OperationalStatus Down
5:
Description "Software Loopback Interface 1"
OperationalStatus Up
6:
Description "Teredo Tunneling Pseudo-Interface"
OperationalStatus Up
7:
Description "Microsoft ISATAP Adapter #2"
OperationalStatus Down
因此,我认为我不能依赖OperationalStatus
。我该怎么做呢?
你在正确的行上,可能已经弄清楚了,但这就是我使用的,到目前为止它已经工作了。我能想到的唯一问题是,如果有人使用不同的虚拟机软件,而不是Hyper-V,因为我正在特别寻找。
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface nic in nics)
{
if (nic.NetworkInterfaceType != NetworkInterfaceType.Loopback
&& nic.NetworkInterfaceType != NetworkInterfaceType.Tunnel
&& nic.OperationalStatus == OperationalStatus.Up
&& nic.Name.StartsWith("vEthernet") == false
&& nic.Description.Contains("Hyper-v") == false)
{
//Do something
break;
}
}
也许在一个物理系统上(不能评论虚拟客户端),你也可以检查NetworkInterfaceType
(NetworkInterfaceType.Wireless80211
&NetworkInterfaceType.Ethernet
)和OperationalStatus
一起检查哪个是真正的物理硬件适配器。
然而,我从来没有尝试过配置wifi收音机是在&该系统还连接到以太网电缆