无需了解子网即可直接进行以太网连接

无需了解子网即可直接进行以太网连接

我有两台Linux设备:

  • 答:一个是静态 IP(例如 10.255.253.5,掩码 255.255.255.0)。我无法知道或更改此 IP。
  • B:第二个有直接访问(屏幕和键盘)

我想使用以太网电缆直接连接这两个设备。据我了解,这两个设备必须位于同一子网才能相互连接。问题是我不知道它是哪个子网。

我尝试过使用arp -a,但它只返回同一子网上的 IP(这意味着没有直接连接的 IP)。

我如何扫描整个网络(设备未连接到互联网或任何其他网络)以找出要连接的 IP 和子网?

基本上,我想象这样的事情:

  • 扫描所有可能的子网以列出活动 IP
  • 切换B设备的IP以匹配找到的子网
  • 连接到找到的IP

如何才能实现这一点呢?

编辑: 根据评论,以下是我所做的。它适用于某些设备,但不适用于其他设备...

  1. 获取远程设备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

  2. 我得到了10.255.253.5正确的IP。

  3. 将本地 IP 更改为位于同一子网(远程 +1):

    ifconfig eth0 10.255.253.6 netmask 255.255.255.0

  4. 对远程设备执行 ping 操作以检查是否可以访问:

    ping 10.255.253.5

  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 地址。(无论如何,直接连接不需要它,因此它是否是真正的网关并不重要。)

相关内容