检测以太网线何时插入

问题描述 投票:0回答:3

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

我正在使用

NetworkChange.NetworkAddressChanged
检测网络何时发生变化

然后

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

但是当我在所有网络接口中搜索以太网连接时,它会返回我正在寻找的内容,但它总是返回蓝牙连接

这是代码:

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);
        }
    }
}

一开始,我试图检查连接的名称并查看是否包含“以太网”一词,但有时(如果我没记错的话)连接名称不包含“以太网”。



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


我正在 Surface Pro 3 上测试它...但也许我因此而遇到蓝牙问题? 尽管如此,我仍然需要它在这样的设备上工作。

c# .net network-programming ethernet
3个回答
2
投票

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

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");
}

0
投票

此链接显示了如何使用 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

网关成本指标

数据类型:uint16数组

访问类型:只读数组

要使用的整数成本度量值(范围从 1 到 9999) 计算最快、最可靠或资源占用最少的 路线。这个论证与 DefaultIPGateway 属性。


0
投票

当连接以太网时,以下函数返回 true。如果未连接以太网或即使已连接 WiFi,也会返回 false。

 public bool isEthernetConnected() {
            foreach (NetworkInterface net in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (net.OperationalStatus ==
                   OperationalStatus.Up)
                {
                    Console.WriteLine("Connected "+ net.NetworkInterfaceType.ToString());   
                    if (net.NetworkInterfaceType.ToString().Contains("Loopback") || net.NetworkInterfaceType.ToString().Contains("Wireless80211"))
                        continue;
                    else if (net.NetworkInterfaceType.ToString().Contains("Ethernet"))
                        return true;
                                     
                }
                else
                {
                    Console.WriteLine("Ethernet not connected");                    
                }
            }
            return false;
        }
© www.soinside.com 2019 - 2024. All rights reserved.