1

我有一个调用 gethostbyname 并在 h_addr_list 中显示第一个 IP 地址的应用程序。在安装了 VMware 并具有多个虚拟适配器的机器上,我的应用程序始终返回其中一个虚拟适配器的 IP 地址。我总是希望我的应用程序给我物理适配器的 IP 地址。

因此,我想重新排序我的虚拟适配器,使物理适配器的 IP 地址在列表中排在第一位。我尝试了所有建议 -

http://support.microsoft.com/kb/171320

http://support.microsoft.com/kb/894564/en-us#appliesto

他们都没有工作。我也在进行更改后重新启动了系统。有没有其他方法可以更改网络适配器的顺序?假设没有,我如何通过我的代码确保我始终获得物理适配器的 IP 地址?

我的操作系统是 Windows 8。这是我的 ipconfig /all 输出 -

Windows IP Configuration

   Host Name . . . . . . . . . . . . : Win8x64D3b
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : NESSINBLR.COM

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : NESSINBLR.COM
   Description . . . . . . . . . . . : Intel(R) 82566DM-2 Gigabit Network Connec
tion
   Physical Address. . . . . . . . . : 00-0F-FE-E7-00-A6
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::bc7c:6cf5:e8ed:c874%12(Preferred)
   IPv4 Address. . . . . . . . . . . : 172.26.82.152(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.252.0
   Lease Obtained. . . . . . . . . . : Wednesday, June 19, 2013 2:55:44 AM
   Lease Expires . . . . . . . . . . : Friday, June 21, 2013 2:55:38 AM
   Default Gateway . . . . . . . . . : 172.26.80.1
   DHCP Server . . . . . . . . . . . : 172.26.116.52
   DHCPv6 IAID . . . . . . . . . . . : 251662334
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-18-3D-50-E5-00-0F-FE-E7-00-A6

   DNS Servers . . . . . . . . . . . : 172.26.82.152
   Primary WINS Server . . . . . . . : 172.26.82.152
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter VMware Network Adapter VMnet1:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet
1
   Physical Address. . . . . . . . . : 00-50-56-C0-00-01
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::d59f:e785:bc67:74c4%17(Preferred)
   IPv4 Address. . . . . . . . . . . : 192.168.3.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 251678806
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-18-3D-50-E5-00-0F-FE-E7-00-A6

   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Ethernet adapter VMware Network Adapter VMnet8:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet
8
   Physical Address. . . . . . . . . : 00-50-56-C0-00-08
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::3d00:a19f:32b5:5c52%18(Preferred)
   IPv4 Address. . . . . . . . . . . : 192.168.5.1(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
   DHCPv6 IAID . . . . . . . . . . . : 268456022
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-18-3D-50-E5-00-0F-FE-E7-00-A6

   DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS over Tcpip. . . . . . . . : Enabled

Tunnel adapter isatap.{A80B07CA-01EF-411D-BB81-A4E2F06D588B}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.NESSINBLR.COM:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : NESSINBLR.COM
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #2
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

Tunnel adapter isatap.{8D6220B3-8F39-4514-8C4E-C79D8263C2B8}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Microsoft ISATAP Adapter #3
   Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP Enabled. . . . . . . . . . . : No
   Autoconfiguration Enabled . . . . : Yes

我的应用程序总是返回 192.168.5.1 而不是 172.26.82.152

请帮忙。

4

1 回答 1

1

我见过类似的东西。这并不能完全回答你的问题,但这就是我所拥有的。

remoteHost = gethostbyname(ac);
int i = 0;
if (remoteHost->h_addrtype == AF_INET)
{
    //while (remoteHost->h_addr_list[i] != 0) 
    //{
    //  addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
    //}
    addr.s_addr = *(u_long *) remoteHost->h_addr_list[0];
}

我已经注释掉了while循环。那部分只是在适配器列表上不断循环,最终在最后一个(在我们的例子中是 VMware 适配器)上停止。

使用 h_addr_list[0] 可以提供我的物理适配器。但是,我不确定订单实际上是如何确定的,或者我如何分辨哪些是物理的,哪些是虚拟的。

希望能有所帮助。

于 2013-10-31T18:54:58.500 回答