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

标签 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 地址。该设备直接连接到卡。我想要这样做的原因是,当设备和卡的子网不同时,它们显然不能很好地发挥作用,我想检测这种情况。

谢谢!

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/

相关文章:

c++ - 如何使用 C++11 的基于范围的 for 循环来输出表中的数据?

c++ - 应该使用哪个函数将字符串转换为 long double?

windows - 如何导出从 CNG API 生成的 RSA key ?

c++ - 客户端和服务器示例不工作

c++ - 指针问题

c++ - MULES 是修正输运方程的正确选择吗? [OpenFOAM]

mysql - QMYSQL 驱动程序未加载(其他解决方案?)

c++ - 在 Windows 上放弃权利

c++ - 如何将 ASN 中的 SIZE OF 运算符与另一个变量组合?

io - 使用 Read::read_to_string 从 TcpStream 读取会挂起,直到连接被远程端关闭