使用 ARP 干预或自定义 TCP/IP 堆栈解决 IP 冲突

使用 ARP 干预或自定义 TCP/IP 堆栈解决 IP 冲突

有点有趣的难题,我有一个由 15-20 个嵌入式设备组成的网络,这些设备实际上使用相同的静态 IP 地址进行硬编码,但它们都有不同的 MAC ID。我需要单独寻址它们才能远程配置它们,而插拔它们并不是一个可持续的解决方案。

虽然我有设备的根访问权限,但我无法预先将它们的 IP 设置为唯一地址,但是我可以为会话重新配置它并在电源循环时重置它,但这需要能够通过 TCP/IP 来寻址它们。

理想情况下,我想要做的是枚举网络上的所有 MAC(假设只保证这个嵌入式设备),然后修改我的 ARP 表或进入并修改中继器(例如运行修改后的 IP 堆栈的树莓派)上的以太网数据包头。理想情况下,此黑客只需要存活足够长的时间即可连接到设备并将其 IP 设置为唯一地址。我想我想要做的本质是用自定义解析协议替换 ARP 服务。

我精通内核、底层和驱动程序开发,但对于 OSI 上 2 级以上的以太网,我有点不知所措。这种干预会对更高级别的协议产生什么影响?我可以简单地替换 Linux 上的 ARP 守护程序来实现此功能吗?

答案1

假设这些设备与您想要执行此操作的设备位于同一子网中,那么应该可以“引导”IP 数据包,但要编写具有正确 MAC 和 IP 地址的以太网数据包。响应将发往您的机器,但您可能需要自己拾取并处理它们,因为操作系统可能无法正确对它们进行分类。

为此,您需要:

  • 粗略了解数据以太网、IP 和 TCP 数据包的组成(谷歌应该可以提供帮助);给出了整个数据包结构的概述)
  • 把它们组装起来并连到电线上的方法(描述基础知识)
  • 接收响应数据包的方法(应该会有所帮助)
  • 以及将接收到的数据包组装成有用内容的方法(由于您接收的是原始以太网数据包,因此 TCP 流不会为您组装或排序,您需要自己缓冲和组装数据以及处理 TCP 协议的其他部分;一旦您完成上述工作,您应该对 TCP 流有足够的了解来执行此操作)

Wireshark是一种网络嗅探工具,它具有丰富的细节,可以帮助您了解网络中发生的情况、数据包中包含的内容,以便您将其与所学内容进行匹配,并帮助您调试软件。

相关内容