gpt4 book ai didi

c# - 如何检测 Windows 是否在 C# 中通过 LAN 或 WiFi 引导流量

转载 作者:可可西里 更新时间:2023-11-01 12:35:45 24 4
gpt4 key购买 nike

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

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

我已经尝试使用 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();
}
}
}

关于c# - 如何检测 Windows 是否在 C# 中通过 LAN 或 WiFi 引导流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com