【发布时间】:2016-03-08 23:11:35
【问题描述】:
有没有办法通过 Windows API 来确定哪个是主要/默认网络适配器?
例如,如果我的 PC 有两个网卡,我需要知道系统使用哪一个来访问互联网,如果我有一个网络适配器和一个虚拟适配器。
我尝试使用GetAdaptersAddresses,但它没有显示哪个是最喜欢的,也许是GetBestInterface?
【问题讨论】:
标签: winapi network-programming adapter default
有没有办法通过 Windows API 来确定哪个是主要/默认网络适配器?
例如,如果我的 PC 有两个网卡,我需要知道系统使用哪一个来访问互联网,如果我有一个网络适配器和一个虚拟适配器。
我尝试使用GetAdaptersAddresses,但它没有显示哪个是最喜欢的,也许是GetBestInterface?
【问题讨论】:
标签: winapi network-programming adapter default
使用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=" + 在此处插入变量
这是一篇声称确定默认值的 CodeProject 文章:
http://www.codeproject.com/Articles/13421/Getting-the-Physical-MAC-address-of-a-Network-Inte
获取网络接口卡的物理 (MAC) 地址并确定它是否是多宿主系统上的主适配器
找出具有给定索引的适配器是否是主适配器 为了找出具有给定索引的适配器是否是 主适配器,我必须在对话框类中添加一个函数 CNetCfgDlg.此代码遍历 m_pAdapters 数组,比较 给定的适配器索引和数组中每个适配器的索引。 如果给定的适配器索引等于所有的最小索引 数组中的适配器,则它是主适配器
还有一件事要考虑,每个适配器都有“自动指标”设置,似乎选择最低设置作为首选(尽管不确定如何以编程方式访问此指标设置):
http://www.softminer.net/2011/09/setting-default-network-adapter-in.html
【讨论】:
SO Answer 解释了如何确定用于连接 Internet 的本地 IP 地址(如 Google 的 DNS 服务器),然后您可以将此本地 IP 地址与 GetAdaptersAddresses 返回的列表进行比较,以确定哪个网卡用于 Internet 访问。
【讨论】: