我有两台Linux设备:
- 答:一个是静态 IP(例如 10.255.253.5,掩码 255.255.255.0)。我无法知道或更改此 IP。
- B:第二个有直接访问(屏幕和键盘)
我想使用以太网电缆直接连接这两个设备。据我了解,这两个设备必须位于同一子网才能相互连接。问题是我不知道它是哪个子网。
我尝试过使用arp -a
,但它只返回同一子网上的 IP(这意味着没有直接连接的 IP)。
我如何扫描整个网络(设备未连接到互联网或任何其他网络)以找出要连接的 IP 和子网?
基本上,我想象这样的事情:
- 扫描所有可能的子网以列出活动 IP
- 切换B设备的IP以匹配找到的子网
- 连接到找到的IP
如何才能实现这一点呢?
编辑: 根据评论,以下是我所做的。它适用于某些设备,但不适用于其他设备...
获取远程设备IP:
tcpdump -i eth0 -s 1500 '(ether[12:2]=0x88cc) -v -c 1 | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -o
我得到了
10.255.253.5
正确的IP。将本地 IP 更改为位于同一子网(远程 +1):
ifconfig eth0 10.255.253.6 netmask 255.255.255.0
对远程设备执行 ping 操作以检查是否可以访问:
ping 10.255.253.5
成功 !
答案1
我尝试使用 arp -a,但它只返回同一子网上的 IP(这意味着没有直接连接的 IP)。
不,不是这个意思。即使是直接连接,就 IP 而言仍然是“子网”(IP 根本就不知道区别,以太网接口就是以太网接口),它仍然会使用 ARP 来解析对方主机的 MAC 地址。
然而,arp -a
从来没有一个命令会显示全部子网内的 IP。它显示主机的 ARP 查找缓存,其中只包含您最近与之通信的同一子网主机的条目(当您不知道与哪个地址通信时则为无)。
我如何扫描整个网络(设备未连接到互联网或任何其他网络)以找出要连接的 IP 和子网?
首先,运行数据包捕获工具(例如Wireshark)检查设备是否发生宣布它会以某种方式检测自身,例如,它可能正在尝试 ping 某些东西或进行 DNS 查询。一旦它这样做,并且您看到来自设备的 IP(或 ARP)数据包,只需记下其源 IP 地址即可。
知道地址后,为您自己的计算机选择一个相邻的地址,然后设置一个足够宽的子网掩码以包含两者。(一开始就使用 /24 或 255.255.255.0 就可以了。)
如果没有,请为计算机配置该范围内可用的最宽子网掩码(例如,对于 10.xxx 地址,配置为 /8 或 255.0.0.0),然后使用任何“IP 扫描”工具。(如果可以选择,最好在“ARP 扫描”模式下运行扫描。)例如,Linux 有该arp-scan
命令。
澄清子网掩码:虽然子网掩码应该匹配子网内的所有设备,它不是严格必需的匹配(尽管配置不匹配肯定会导致不良行为)。如果您有一个没有外部连接的独立以太网,只要每个设备使用覆盖其他设备 IP 地址的子网掩码,它们就会将彼此视为“本地”,这就足以让它们进行通信 - 即使它们的配置并不完全匹配。
(因此,如果您知道设备是 10.255.253.6 但不知道其配置的子网掩码,则选择相邻的 IP 地址(例如 10.255.253.5)是一个不错的选择,以确保设备将您的 IP 识别为其子网的本地 IP。)
答案2
如果你已经知道 IP 地址和网络掩码,那么你也知道子网。
它们是直接相关的。
子网只不过是 ip 地址和掩码的逻辑与,以 4 字节二进制数写出。在本例中为 10.255.253.0。
(掩码的前 3 个字节全为 1,最后一个字节全为 0。)
这意味着子网的前 3 个部分与 ip 地址相同,并且第 4 个字节通过 AND 设置为零。)
因此,对于另一台计算机,只需在同一个子网中选择一个任意的 IP 地址(例如 10.255.253.6)就可以了。
对于默认网关(如果您的系统要求填写一个值),请使用您自己的 IP 地址。(无论如何,直接连接不需要它,因此它是否是真正的网关并不重要。)