【问题标题】:Detecting IP addresses of network cards and ethernet devices with Windows API使用 Windows API 检测网卡和以太网设备的 IP 地址
【发布时间】:2011-10-14 21:40:17
【问题描述】:

我在这里使用微软代码来学习如何检测卡和设备的 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

【问题讨论】:

    标签: c++ windows network-programming


    【解决方案1】:

    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,备份routeipconfig是调试的好主意!
    【解决方案2】:
    1. 不知道,您至少应该指定您的配置,是 DHCP 还是静态 IP,还是其他?
    2. loopback interface
    3. 可能需要一些广播。 ARP 是链路层协议,因此可以在没有 IP 地址的情况下使用它来广播链路以查找设备,然后检测其地址。不太了解 Windows,但在 Unix 上为此提供了一个 arping 命令。

    【讨论】:

    • 1.静态 IP 和 DHCP。最好是静态 IP,但用户可以设置任何一种方式。 2. 谢谢! 3. 谢谢!
    • @Awesomania,对不起,我的意思是为断开连接的第二个接口配置。据说是通过 DHCP 或其他方式获取其地址。实际上,我倾向于同意 selbie,你可能又把它误认为是环回,因为看起来一些真正的 NIC 不太可能拥有这个 IP。
    猜你喜欢
    • 2011-09-06
    • 2014-08-09
    • 2017-05-14
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多