我有一个调用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
请帮忙。
答案 0 :(得分: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]给出了我的物理适配器。但是,我不确定订单是如何确定的,或者我怎么知道哪个是物理的,哪个是虚拟的。
希望有所帮助。