如何通过WinApi确定默认网络适配器?

时间:2016-03-08 23:11:35

标签: winapi network-programming adapter default

有没有办法通过Windows API来确定哪个是主要/默认网络适配器?

例如,如果我有一台带有两个网卡的PC,我需要知道系统使用哪一个来访问互联网,类似的话,如果我有网络适配器和虚拟适配器。

我尝试使用GetAdaptersAddresses,但它没有显示哪个是最喜欢的,可能是GetBestInterface

2 个答案:

答案 0 :(得分:2)

如何使用GetAdaptersInfo并寻找满足您要求的IP范围?

或者,遇到这个(WMI):

https://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx

〜剪断:

  

完成后,您可能会将列表缩小为一个   或两个配置的适配器。

     

您还可以使用以下过程查找默认适配器:

     
      
  1. 运行以下查询:" SELECT InterfaceIndex,Destination FROM Win32_IP4RouteTable WHERE Destination =' 0.0.0.0'"你应该只有   一个默认网络目标0.0.0.0。
  2.   
  3. 使用InterfaceIndex检索所需的网络适配器。 " SELECT * FROM Win32_NetworkAdapter WHERE InterfaceIndex =" +   insertVariableHere
  4.   

这是一篇声称确定默认值的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访问。