在Linux 2.6.21(glibc 2.3.5)上执行ARP和反向ARP

在Linux 2.6.21(glibc 2.3.5)上执行ARP和反向ARP,linux,ip-address,mac-address,arp,Linux,Ip Address,Mac Address,Arp,我需要在任意IP网络上存储对第三方设备的持久引用,其中设备的IP地址可以是静态的,也可以由DHCP随机分配。我不能控制网络上的设备,也不能依赖现有的DNS和其他ad-hoc网络协议或与这些设备一起工作的协议 所以我被指示调查使用硬件地址和ARP。这将工作,但我不想重复代码。内核必须管理ARP表。在Windows上,您可以使用etc访问它 我希望有一个API来回答这两个问题: 如何将IP地址转换为MAC地址?(ARP) 如何将MAC地址转换为IP地址?(InARP) 如果没有,我可能需要更多的

我需要在任意IP网络上存储对第三方设备的持久引用,其中设备的IP地址可以是静态的,也可以由DHCP随机分配。我不能控制网络上的设备,也不能依赖现有的DNS和其他ad-hoc网络协议或与这些设备一起工作的协议

所以我被指示调查使用硬件地址和ARP。这将工作,但我不想重复代码。内核必须管理ARP表。在Windows上,您可以使用etc访问它

我希望有一个API来回答这两个问题:

  • 如何将IP地址转换为MAC地址?(ARP)
  • 如何将MAC地址转换为IP地址?(InARP)
如果没有,我可能需要更多的手动操作:

  • 如何读取内核的ARP表
  • 如果我自己确定了映射,如何添加条目
    • /proc/net/arp


      K

      ARP表往往是相当局部的,而且寿命很短。如果检查协议,通常仅当给定的IP地址位于本地子网中时才提供真正的MAC地址。 否则,数据包被转发到本地路由器,然后由路由器负责转发

      如果您在Windows上执行“
      arp-g
      ”,或在UNIX上执行“
      arp-a
      ”,您将看到该表,但由于上述原因,我认为这对您没有任何好处。那命令和

      这就是DNS的真正用途,但正如你所说,它可能不是你的选择

      您可能需要在应用程序级别编写自己的“ARP”数据库。

      至于ARP:
      您可以使用系统(“/usr/bin/arp-option-of-u-choice”);并解析输出,但这是一个丑陋的黑客不是我的推荐

      看看/usr/include/linux/sockios.h——关于SIOCGARP、SIOCDARP和SIOCSARP的详细信息。这些是可以在linux上管理ARP表的IOCTL。当然,您必须在套接字fd上执行这些IOCTL。 以下是一些示例:
      我相信你也可以在其他几种语言中找到许多其他的例子。我假设你用的是C

      至于RARP:
      linux rarp手册页中的引用: “此程序已过时。从2.3版开始,Linux内核不再 包含RARP支持。有关替换RARP守护程序,请参阅 tia.org/pub/net工具“

      因此,您必须在目标系统上安装rarpd。

      在第一段中已升级。如果您不信任网络,您将如何获得这些IP地址,以及如何知道它们是否更改?为什么你要尝试用一些新的东西来复制已经有多年研究和实践的东西呢?可能是重复的