如何确定哪个网络适配器连接到互联网

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

我正在用 C# 编写一个程序,需要监视当前使用的互联网带宽量,以便在互联网使用率较低时进行后台上传。如何自动判断哪个网络适配器连接到互联网?

c# .net networking
7个回答
4
投票

当我阅读此页面时,我最终点击了 MSDN 链接,在那里我找到了 GetBestInterface 函数。我可以用它来找到连接到互联网的适配器


3
投票

检查路由表并查找具有默认路由(到

0.0.0.0
的路由)的接口 - 这是连接到更广阔世界的接口(如果有)。


3
投票

请参阅here,了解有关如何在 VB.NET 中监视所用带宽的类似问题,但原理是相同的! 这里是另一个问题,这是检查互联网连接的最快方法。

希望这有帮助, 此致, 汤姆.


3
投票

您可以使用WMI查询所有适配器并查看连接的是哪一个。
本文向您展示了如何在 VB.Net 中执行此操作(非常容易转移到 C#)。


0
投票

适配器在未连接到互联网时可能会通过多种方式显示为“已连接到互联网”。相反,它也有可能“未连接到互联网”但仍然处于连接状态。

就像生活中的许多事情一样,“布丁的好坏在于吃”如果你想知道你们是否有联系,你需要尝试与某些东西交谈。

我喜欢 time.gov,因为它返回一小段包含当前时间的 XML,这样您就可以确保您实际上正在连接到网络,并且没有获取某种缓存数据或重定向到强制门户。

只需循环浏览适配器,看看哪个适配器实际上具有连接性。


0
投票

使用下面的代码片段获取当前活动的网络适配器。

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

class Program
{
     static void Main(string[] args)
     {
        NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(o => o.OperationalStatus == OperationalStatus.Up && o.NetworkInterfaceType != NetworkInterfaceType.Tunnel && o.NetworkInterfaceType != NetworkInterfaceType.Loopback);
        if (networkInterface != null)
        {
            Console.WriteLine(networkInterface.Name);
        }
     }
}

0
投票

还有一个经常有效的技巧:由于虚拟地址通常由以 PC 为主机的虚拟化软件使用,因此虚拟接口有一个网关地址。这意味着虚拟接口的 v4 IP 将以 .1 结尾,或更准确地说,它是该接口子网掩码内的最低地址。所以

<IP> and (not MASK)
将为 1.

没有官方规定网关地址必须为1,但这是一个广泛使用的标准。

© www.soinside.com 2019 - 2024. All rights reserved.