考虑以下设置:带有LAN接口和WiFi接口的Windows PC(任何新的笔记本电脑的标准)。 每个接口可能连接或从networking断开。 我需要一种方法来确定哪一个适配器是连接到互联网的 – 特别是,如果他们都连接到不同的networking,一个连接到互联网和一个没有。
我目前的解决scheme包括使用IPHelper的“ GetBestInterface ”函数并提供IP地址“0.0.0.0”。
你有任何其他的解决scheme,你可能会build议这个问题?
在回答一些问题之后,让我详细说明一下:
我需要这个,因为我有一个产品必须select绑定到哪个适配器。 我无法控制产品运行的networking或主机的设置,所以我需要一个尽可能健壮的解决scheme,尽可能less的假设。
我需要在代码中这样做,因为这是产品的一部分。
@Chris Upchurch:这使我依赖google.com(通常不是问题)以及任何可能安装的个人防火墙来允许ping。
@Till:就像Steve Moon说的那样,依靠适配器的地址是有风险的,因为你在内部networking设置上做了很多假设。
@Steve Moon:看看路由表听起来是个好主意,但我不是自己应用路由逻辑,而是尝试使用上面描述的“GetBestInterface”。 我相信它应该做的就是你在答案中概括的内容,但是我不确定。 我不愿意实现自己的“路由逻辑”的原因是,比起使用由更多的“硬核”networking人员编写和testing的库/ API,我更容易犯错。
从技术上讲,没有“连接到互联网”。 真正的问题是,哪个接口可以路由到所需的地址。 现在,您正在查询“默认路由” – 如果没有到达目的地的特定路由,则应用该路由。 但是,你忽略了任何特定的路线。
幸运的是,99.9%的家庭用户会这样做。 他们不太可能有一个路由表,GetBestInterface将自动更喜欢有线通过无线 – 所以你应该是好的。 抛出一个覆盖选项,为你搞砸了0.1%的情况,并把它称为一天。
但是,对于公司使用,您应该使用GetBestInterface作为特定的目的地 – 否则,如果有人与您的目的地在同一个LAN上,则会出现问题(这意味着您应该采用“内部”接口,而不是“外部” )或有一个特定的路线到您的目的地(例如,我的内部网络可以与您的目的地的网络同行)。
然后再次,我不确定你打算用这个适配器“连接到互联网”,所以它可能不是什么大不了的。
我会看看路由表。 无论哪个网卡有一个0.0.0.0的路由AND是启用AND具有最低的指标,是目前正在向互联网发送数据包的NIC。
所以在我的情况下,最重要的是“互联网网络”。
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 10.0.0.10 10.0.0.51 20 0.0.0.0 0.0.0.0 10.0.0.10 10.0.0.50 25 (much other stuff deleted)
另一个选择是ping或GetBestInterface 4.2.2.2 – 这是一个古老的,历史悠久的DNS服务器,目前由GTEI持有; 如果我记得正确的话,以前由斯普林特。
显然,在Vista中有新的接口,使互联网连接查询和更多。 看看NLM接口 ,特别是在INetworkConnection – 你可以使用GetConnectivity方法具体查询网络连接是否具有互联网连接。
另请参阅: Windows Vista上的网络意识不幸的是,这只能在Vista上使用,所以对于XP,我必须保持原有的启发式。
通过每个网卡ping google.com。
开始>运行> cmd.exe(这可以在XP和Vista中运行): ipconfig /all
这将显示有关计算机中接口的所有信息。 面向公众的接口应该有一个公共的IP地址。 对于初学者来说, 它不应该是192.168.xx或10.xxx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。