有没有办法通过Windows API来确定哪个是主要/默认网络适配器?
例如,如果我有一台带有两个网卡的PC,我需要知道系统使用哪一个来访问互联网,类似的话,如果我有网络适配器和虚拟适配器。
我尝试使用GetAdaptersAddresses
,但它没有显示哪个是最喜欢的,可能是GetBestInterface
?
答案 0 :(得分:2)
如何使用GetAdaptersInfo并寻找满足您要求的IP范围?
或者,遇到这个(WMI):
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx
〜剪断:
完成后,您可能会将列表缩小为一个 或两个配置的适配器。
您还可以使用以下过程查找默认适配器:
- 运行以下查询:" SELECT InterfaceIndex,Destination FROM Win32_IP4RouteTable WHERE Destination =' 0.0.0.0'"你应该只有 一个默认网络目标0.0.0.0。
- 使用InterfaceIndex检索所需的网络适配器。 " SELECT * FROM Win32_NetworkAdapter WHERE InterfaceIndex =" + insertVariableHere
醇>
这是一篇声称确定默认值的CodeProject文章:
http://www.codeproject.com/Articles/13421/Getting-the-Physical-MAC-address-of-a-Network-Inte
获取网络接口卡的物理(MAC)地址并查明它是否是多宿主系统上的主适配器
确定具有给定索引的适配器是否是主适配器 为了找出具有给定索引的适配器是否是 主适配器,我不得不在对话框类中添加一个函数 CNetCfgDlg。此代码迭代m_pAdapters数组,进行比较 给定的适配器索引,其中包含数组中每个适配器的索引。 如果给定的适配器索引等于all的最小索引 数组中的适配器,然后它是主适配器
还有一件事需要考虑,那就是“自动衡量标准”'设置为每个适配器似乎选择最低设置作为首选(虽然不知道如何以编程方式访问此度量设置):
http://www.softminer.net/2011/09/setting-default-network-adapter-in.html
答案 1 :(得分:2)
此SO Answer说明了如何确定用于连接互联网的本地IP地址(如Google的DNS服务器),然后您可以将此本地IP地址与GetAdaptersAddresses返回的列表进行比较以确定哪个网卡用于Internet访问。