使用Windows API检测网卡和以太网设备的IP地址
Detecting IP addresses of network cards and ethernet devices with Windows API
我在这里使用微软代码来学习如何检测卡和设备的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地址。设备直接连接到卡上。我想这样做的原因是,当设备和卡的子网不同时,它们显然不能正常运行,我想检测这种情况。
谢谢!
R127.0.0.1的地址不是另一张卡的地址。它是环回适配器的地址——一个只能用自己发送和接收数据的虚拟IP地址。另一个网卡(没有插入网络)根本不在地址表中。
你可能只想调用GetAdapterAddresses并过滤掉所有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)
- 不知道,你至少应该指定你的配置,是DHCP还是静态IP,还是别的什么?
- 是环回接口
- 可能需要一些广播。ARP是链路层协议,可以在没有IP地址的情况下通过广播链路找到设备,然后检测设备的地址。我不太了解windows,但是在Unix上有一个
arping
命令。
相关文章:
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 使用 C++将 IP 地址附加到字符*
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- Rabbitmq 将本地主机更改为 IP 地址C++
- C++ - 使用代码块从文件中读取 IP 地址
- C 使用from_string创建IP地址的C 导致lambda错误
- 如何在解析过程中区分 IP 地址和域名
- 如何使用 asio 库获取 IP 地址的主机名
- IP地址匹配过滤功能
- 如何将C++ ulong 4 字节 IP 地址正确转换为 C# 类型
- 如何在NS3中设置节点的IP地址和数据?
- 如何从活动的 udp 连接获取远程 IP 地址和端口
- 无符号的 int 到 IP 地址字符串,不带 itoa/to_string/boost
- 如何在FD_SET内获取套接字的IP地址
- 使用Boost库中的PC中获取我的以太网设备IP地址的列表
- 使用静态IP地址时,ESP32 httpclient连接拒绝了
- C++检查有效的 IP 地址或 IP
- 如何使用 Poco::Net::HTTPSClientSession 绑定特定的源 IP 地址
- 如何在Windows上绕过主机文件获取真实的IP地址