使用Windows API检测网卡和以太网设备的IP地址

时间:2011-07-28 07:53:42

标签: c++ windows network-programming

我在这里使用Microsoft代码来学习如何检测卡和设备的IP地址:

http://msdn.microsoft.com/en-us/library/aa365949%28v=VS.85%29.aspx

我注意到一些奇怪的行为。

  1. 我有一个带有两个以太网卡的系统;一个连接到互联网,一个连接到以太网设备。当我运行示例代码时,它将始终为具有Internet连接的卡提供IP地址,但另一个卡将显示为127.0.0.1,子网掩码为255.0.0.0,除非我已插入以太网设备和动力。但该卡应该有一个默认的IP地址,无论它实际连接到什么,对吧?如何修改此代码以检测它?

  2. 检测到第三个IP地址似乎只是空数据。我在另一台具有单一网络连接的计算机上尝试过此操作,并且还检测到第二个不存在的连接。每次,此连接的IP地址为127.0.0.1,子网掩码为255.0.0.0。这代表什么?

  3. 鉴于演示代码,这是否易于编辑,以便能够检测网络上任何卡连接的设备的IP地址?我真的只想检测单个以太网设备设置的IP地址。设备直接连接到卡。我想这样做的原因是因为当他们的子网不同时,设备和卡显然不能很好地发挥作用,而我想在何时检测到这种情况。

  4. 谢谢!

    [R

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

  1. Dunno确切地说,您至少应该指定您的配置,是DHCP还是静态IP,还是其他什么?
  2. 这是loopback interface
  3. 可能需要一些广播。 ARP是链路层协议,因此可以在没有IP地址的情况下使用它来广播链接以查找设备,然后检测其地址。不准确了解Windows,但在Unix上,存在arping命令。