查找直接连接设备的IP地址

28

有没有一种方法可以找出直接连接到特定以太网接口的设备的IP地址?即,给定一个主机、一个有线以太网连接和连接到此有线连接的第二个主机,哪个位于IP下面的层或协议可用于查找这个信息。

我也可以使用仅限于Windows的解决方案,使用某些Windows-API函数或回调。

(我知道真正的方法可能是通过DHCP,但这是关于发现遗留设备的。)


如果两个设备都可以连接到互联网,则连接到互联网并检查默认网关以查看所有连接的设备。 - Ryhan
5个回答

21
嗯...有很多方法。 我回答了另一个网络发现的问题,并写了一点getting started
一些TCP/IP堆栈会回复ICMP广播。 所以你可以尝试对你的网络广播地址进行PING测试。
例如,你的IP是192.168.1.1,子网掩码是255.255.255.0
  1. ping 192.168.1.255
  2. 在5秒后停止PING
  3. 观察设备的回复:arp -a
注意:在第3步中,你会得到MAC到IP的缓存条目列表,所以即使它们不回复icmp_get,也会包括你在过去几分钟内与之交换数据的子网中的主机。
注意(2):现在我在Linux上。我不确定,但可能Windows不会通过广播回复icmp_get。
你的电脑上只连接了这一个设备吗? 它是路由器还是另一台简单的电脑?

2
如果地址不在192.168.1.0/24子网中怎么办? - user2284570
@user2284570 如果不在同一个IP子网中,这种方法是行不通的。我知道的唯一其他可行的方法是使用snmp-get,尝试读取远程设备的接口表,但它需要以下条件:1)远程主机上有SNMP守护进程;2)具有对该主机的读访问权限的社区。 - Massimo
1
哦,我忘了我的情况是针对posix环境的。 - user2284570

10

使用DHCP, 您需要在主机上运行DHCP服务器并在从机上运行客户端。然后主机可以查询服务器以查找其发放的地址,这可能有些冗余。

我无法直接帮助您处理Windows。在Unix上,“arp”命令将告诉您已知连接到本地以太网段的IP地址。Windows也具有相同的信息(因为它是IP/Ethernet接口的核心部分),但我不知道如何访问它。

当然,网络堆栈只会在先前看到来自其他主机的流量时才会知道该主机。您可能需要在接口上首先发送广播数据包以获取某种响应,从而填充本地ARP表。


10

Windows 7内置了arp命令。 arp -a可以显示与您的系统连接的静态和动态类型接口。


谢谢!这就是我需要知道的全部内容 - “arp -a”向我展示了我需要ping和ssh进入我的树莓派的IP地址。 - ConcernedHobbit

6
你最好的方法是安装Wireshark,重启设备等待TCP/UDP流,广播会宣布两个以太网端口的IP地址。当连接的设备没有启用DHCP客户端时,这尤其有用,然后你可以从那里开始。

1
你还可以通过LDWin获取直接连接的网络设备(例如网络交换机)的信息,LDWin是一个免费的便携式Windows程序,发布在github上。LDWin支持以下链路发现方法:CDP(Cisco Discovery Protocol)和LLDP(Link Layer Discovery Protocol)。你可以获得模型、管理IP、VLAN标识符、端口标识符、固件版本等信息。请访问以下链接以获取更多信息:http://www.sysadmit.com/2016/11/windows-como-saber-la-ip-del-switch-al-que-estoy-conectado.html

这在Windows 11上对我没有起作用。 - polarka
这在我的 Windows 11 上没有起作用。 - polarka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接