检测以太网电缆何时插入

Detect when ethernet cable is plugged

我正在尝试检测以太网电缆何时插入或拔出,​​但我遇到了一些问题,我不知道我是否做得很好。

我正在使用 NetworkChange.NetworkAddressChanged 检测网络何时发生变化

然后 NetworkInterface.GetAllNetworkInterfaces() 检查以太网连接是否可用 属性 .OperationalStatus.

但是当我在所有网络接口中搜索以太网连接时,它 return 我正在寻找的东西,但它 总是 return 我的蓝牙连接 一起吧。

这是代码:

public Form1()
{
    InitializeComponent();

    NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback);
    Console.ReadLine();
}

static void AddressChangedCallback(object sender, EventArgs e)
{
    NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface myInterface in adapters)
    {
        //if (n.Description.ToLower().Contains("ethernet")){
        //if (n.NetworkInterfaceType.ToString().ToLower().Contains("ethernet")){

        IPInterfaceProperties properties = n.GetIPProperties();
        if (myInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
        {
            Console.WriteLine(myInterface.Description + " ........... :  " + myInterface.OperationalStatus);
            Console.WriteLine("NetworkInterfaceType : " + myInterface.NetworkInterfaceType);
        }
    }
}

一开始,我试图检查连接名称并查看是否包含 "Ethernet" 单词,但它似乎(如果我没记错的话)有时连接名称不包含 "Ethernet".



您是否有一些始终保持良好连接(没有蓝牙)的提示?
我的方法错了吗?


我正在 Surface Pro 3 上对其进行测试...但也许我因此遇到了蓝牙问题? 尽管如此,我还是需要它在这样的设备上工作。

此链接显示如何使用 Powershell 执行此操作,但其中一个案例使用 WMI。

http://www.powershellmagazine.com/2013/04/04/pstip-detecting-wi-fi-adapters/

并且此链接显示了一个有趣的 属性,有时可以提供帮助:

https://msdn.microsoft.com/en-us/library/aa394217(v=vs.85).aspx

GatewayCostMetric

Data type: uint16 array

Access type: Read-only Array

of integer cost metric values (ranging from 1 to 9999) to be used in calculating the fastest, most reliable, or least resource-intensive routes. This argument has a one-to-one correspondence with the DefaultIPGateway property.

这可以通过检查其运行状态来完成:

foreach (System.Net.NetworkInformation.NetworkInterface net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
{
     if (net.OperationalStatus == 
        System.Net.NetworkInformation.OperationalStatus.Up)
           Console.WriteLine("N/w connected");
     else
           Console.WriteLine("N/w not connected");
}