检测以太网电缆何时插入

时间:2015-10-01 09:43:51

标签: c# .net network-programming ethernet

我试图检测以太网线插入或拔出的时间,但我遇到了一些问题,而且我不知道我是否做得好。

我正在使用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上测试它......但是我可能因此而遇到蓝牙问题? 尽管如此,我还是需要它才能在这样的设备上工作。

2 个答案:

答案 0 :(得分: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

  

GatewayCostMetric

     

数据类型:uint16数组

     

访问类型:只读数组

     

要使用的整数成本度量值(范围从1到9999)   计算最快,最可靠或最少资源密集型   路线。这个论点与。一一对应   DefaultIPGateway属性。

答案 1 :(得分:0)

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

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