微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检测Windows是否通过局域网或WiFi通过C#

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

知道它是以太网而不是WiFi是非常重要的,因为程序的行为将有所不同,具体取决于使用WebClient发送数据是通过WiFi还是以太网。

我曾尝试使用System.Net.networkinformation.NetworkInterfaceType但这似乎报告了很多WiFi卡的“以太网”。

任何build议将不胜感激。

当源和目标位于同一个远程文件服务器上时,是否远程处理File.copy?

如何删除俄语的本地化.NET Framework?

在Windows通用应用程序中使用StatusBar

什么USB设备(友好名称)当前连接到PC?

带有通配符的.NET DirectoryInfo.GetFiles在不同的驱动器上有不同的含义

如何为Windows上的任务栏创build工具栏?

GetEventLogs()返回没有安装事件日志?

当ReadOnly = false时,性能计数器显示不同的值

设置非Office文件的Windows文件属性

我在哪里可以findsql Server版本的友好的string?

根据这个有关NetworkInterface.NetworkInterfaceType属性的MSDN页面

属性只返回在NetworkInterfaceType枚举中定义的可能值的一个子集。 可能的值包括以下内容

以太网Fddi环回Ppp Slip TokenRing未知

所以确定性的你可能是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 (GatewayIPAddress@R_171_4045@ion 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(); } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐