设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

如何检测Windows是否通过LAN或WiFi通过C#

发布时间:2021-01-06 21:43 所属栏目:117 来源:网络整理
导读:我在C#中使用.NET 2编写一个软件,它检测 Windows机器上是否有活动的以太网连接. 重要的是它知道它是以太网而不是WiFi,因为程序的行为会有所不同,这取决于是否通过WiFi或以太网发送WebClient数据. 我已经尝试使用System.Net.NetworkInformation.NetworkInterf

我在C#中使用.NET 2编写一个软件,它检测 Windows机器上是否有活动的以太网连接.

重要的是它知道它是以太网而不是WiFi,因为程序的行为会有所不同,这取决于是否通过WiFi或以太网发送WebClient数据.

我已经尝试使用System.Net.NetworkInformation.NetworkInterfaceType,但这似乎报告’以太网’为很多WiFi卡.

任何建议将不胜感激.

根据这个 MSDN page关于NetworkInterface.NetworkInterfaceType的属性,

This property only returns a subset of
the possible values defined in the
NetworkInterfaceType enumeration. The
possible values include the following:

Ethernet Fddi Loopback Ppp Slip TokenRing Unknown

所以确定性地你可能是SOL.

但是,您可以在可用的网络连接上执行一些启发式方法,以确定它们是WiFi还是电缆.这些可能包括许多迭代等待的ping响应/延迟时间等.

此外,适配器的速度可能被用作提示.对于我的WiFi适配器,速度总是显示为“54000000”(例如54 mbs).由于有一组常见的WiFi速度,这可能是有帮助的.

或许以下代码可能让你开始:

using System;
using System.Net.NetworkInformation;
using System.Net;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
            Ping pingObj = new Ping();

            for (int i = 0; i < adapters.Length; i++)
            {
                Console.WriteLine("Network adapter: {0}",adapters[i].Name);
                Console.WriteLine("    Status:            {0}",adapters[i].OperationalStatus.ToString());
                Console.WriteLine("    Interface:         {0}",adapters[i].NetworkInterfaceType.ToString());
                Console.WriteLine("    Description:       {0}",adapters[i].Description);
                Console.WriteLine("    ID:                {0}",adapters[i].Id);
                Console.WriteLine("    Speed:             {0}",adapters[i].Speed);
                Console.WriteLine("    SupportsMulticast: {0}",adapters[i].SupportsMulticast);
                Console.WriteLine("    IsReceiveOnly:     {0}",adapters[i].IsReceiveOnly);
                Console.WriteLine("    MAC:               {0}",adapters[i].GetPhysicalAddress().ToString());
                if (adapters[i].NetworkInterfaceType != NetworkInterfaceType.Loopback)
                {
                    IPInterfaceProperties IPIP = adapters[i].GetIPProperties();
                    if (IPIP != null)
                    {
                        // First ensure that a gateway is reachable:
                        bool bGateWayReachable = false;
                        foreach (GatewayIPAddressInformation gw in IPIP.GatewayAddresses)
                        {
                            Console.WriteLine("    Gateway:     {0} - ",gw.Address.ToString());

                            // TODO: Do this many times to establish an average:
                            PingReply pr = pingObj.Send(gw.Address,2000);

                            if (pr.Status == IPStatus.Success)
                            {
                                Console.WriteLine("    reachable ({0}ms)",pr.RoundtripTime);
                                bGateWayReachable = true;
                                break;
                            }
                            else
                                Console.WriteLine("    NOT reachable");
                        }
                        // Next,see if any DNS server is available. These are most likely to be off-site and more highly available.
                        if (bGateWayReachable == true)
                        {
                            foreach (IPAddress ipDNS in IPIP.DnsAddresses)
                            {
                                Console.WriteLine("    DNS:         {0} - ",ipDNS.ToString());
                                PingReply pr = pingObj.Send(ipDNS,5000); // was 2000,increased for Cor in UK office
                                if (pr.Status == IPStatus.Success)
                                {
                                    Console.WriteLine("    reachable ({0}ms)",pr.RoundtripTime);
                                    Console.WriteLine("    --- SUCCESS ---");
                                    break;
                                }
                                else
                                    Console.WriteLine("    NOT reachable");
                            }
                        }
                    } // if (IPIP != null)
                }
            } // foreach (NetworkInterface n in adapters)

            Console.ReadLine();
        }
    }
}

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读