我在这里使用 Microsoft 代码来学习如何检测卡和设备的 IP 地址:
http://msdn.microsoft.com/en-us/library/aa365949%28v=VS.85%29.aspx
我注意到一些奇怪的行为。
我的系统有两个以太网卡;一个连接到互联网,一个连接到以太网设备。当我运行示例代码时,它将始终为具有 Internet 连接的卡提供 IP 地址,但另一张卡将显示为 127.0.0.1,子网掩码为 255.0.0.0,除非我插入以太网设备并供电。但是网卡应该有一个默认的 IP 地址,无论它是否实际连接到任何东西,对吧?我如何修改此代码以检测到它?
检测到第三个 IP 地址似乎只是空数据。我在另一台具有单一网络连接的计算机上尝试了此操作,它还检测到第二个不存在的连接。每次,此连接的 IP 地址为 127.0.0.1,子网掩码为 255.0.0.0。这代表什么?
鉴于演示代码,是否易于编辑以检测网络上任何卡所连接的设备的 IP 地址?我真的只想检测单个以太网设备设置的 IP 地址。该设备直接连接到卡。我想要这样做的原因是,当设备和卡的子网不同时,它们显然不能很好地发挥作用,我想检测这种情况。
谢谢!
R
最佳答案
127.0.0.1 的地址不是另一张卡的地址。它是环回适配器的地址——一个只能与自身发送和接收数据的虚拟 IP 地址。另一个 NIC(未插入网络)根本不在地址表中。
您可能只想调用 GetAdapterAddresses并过滤掉 IFType 为 IF_TYPE_SOFTWARE_LOOPBACK 的所有适配器。
如果您想查看使用提供相同功能的现有工具,请在命令提示符下键入以下任一命令:
route print
(This will dump the routing table)
ipconfig /all
(this will show you the state of ALL adapters including the loopback)
关于c++ - 使用 Windows API 检测网卡和以太网设备的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855688/