生活的意义在于对人类全体发生兴趣,并与之合作,为我们的世界作出贡献,他们也在努力地培养着爱情和对社会的兴趣。
工作中遇到一个问题,如何从Windows平台下众多的IP中找到所需要的物理IP?
手动查找
通过手动查找的方式,是可以很轻松的找到该IP:ipconfig /all
。执行该命令后,我们能看到下列数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 以太网适配器 以太网:
物理地址. . . . . . . . . . . . . : FC-AA-14-14-5D-1F IPv4 地址 . . . . . . . . . . . . : 172.77.167.37(首选)
以太网适配器 VMware Network Adapter VMnet1:
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-01 IPv4 地址 . . . . . . . . . . . . : 192.168.73.1(首选)
以太网适配器 VMware Network Adapter VMnet8:
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08 IPv4 地址 . . . . . . . . . . . . : 192.168.50.1(首选)
|
通过名称,就可以看出以太网对应的IPv4地址172.77.167.37
就是我们需要的物理IP地址。
程序查找
然而如何通过程序区分呢?在我的Windows电脑上,存在8个网络接口,其中包括:
如果找到我们需要的物理IPv4地址呢?需要一一筛选。
- 回环地址:127.0.0.1
- 虚拟机地址:通过Mac地址来区分,虚拟机Mac地址的格式为
00-50-56
(十六进制)
- IPv6地址:很长很长的一撮,很好区分
- IPv4地址:剩下的就是IPv4地址了
使用第三方库Poco的区分代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| using Poco::Net::NetworkInterface; std::string address; NetworkInterface::NetworkInterfaceList list = NetworkInterface::list();
for (auto iter = list.begin(); iter != list.end(); ++iter) { NetworkInterface::MACAddress mac = iter->macAddress(); if (!iter->address().isLoopback() && !(mac[0] == 0x00 && mac[1] == 0x50 && mac[2] == 0x56) && iter->address().isIPv4Compatible()) { address = iter->address().toString(); } }
|