检测哪个网络接口正在使用

本文关键字:网络接口 检测 | 更新日期: 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收音机是在&该系统还连接到以太网电缆