gpt4 book ai didi

c# - 我能比 NetworkInterface.GetIsNetworkAvailable() 做得更好吗?

转载 作者:行者123 更新时间:2023-11-30 18:26:36 26 4
gpt4 key购买 nike

我有一个 .NET 应用程序需要从网站访问资源。访问这些资源可能需要用户更改其代理设置。

我想知道如何以一种有助于决定是否为用户提供更改其代理设置的能力的方式从应用程序检测网络的存在(即潜在的互联网连接)。如果没有可以连接到 Internet 的可用网络,则更改代理设置也无济于事。

NetworkInterface.GetIsNetworkAvailable() , 但这返回 true

if any network interface is marked "up" and is not a loopback or tunnel interface.

我发现在我机器上断开网线和wifi后(谷歌无法访问),这个方法仍然返回true,并且有多个网络接口(interface)仍然可用。

  • 有一种 Ppp 对应于 VPN 连接。
  • 另一个具有以太网类型,但描述为“Hyper-V 虚拟以太网适配器 #4”。
  • 第三个有一种环回。

显然,我进行的测试只是探索性的,不能用作提出某种过滤器的决定性手段。有一个建议的过滤器 here但在我的测试中,无论我是否有互联网连接,这总是返回 false,除非我连接到 VPN。

我不能只尝试访问(比方说)google.com,因为这也可能由于代理设置配置不正确而失败。

我正在尝试做的事情是否有可行的解决方案?我能比 GetNetworkIsAvailable() 做得更好吗?

最佳答案

正如 Simon Mourier 指出的那样在answer on another question , 在某些情况下,标准方法会被虚拟卡所欺骗。

他提议使用 NetworkInterface.GetAllNetworkInterfaces() 并遍历接口(interface)检查连接并忽略虚拟、隧道和环回接口(interface)。

我已经实现了他的解决方案并且效果很好。在性能方面,您可以跳过他的初始 NetworkInterface.GetIsNetworkAvailable(),因为其余代码执行完全相同的检查。这两种方法都相当耗费 CPU,因此无需同时运行。

我不会抄袭,请看他的回答:https://stackoverflow.com/a/8345173/146921

关于c# - 我能比 NetworkInterface.GetIsNetworkAvailable() 做得更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305009/

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