我需要在任意IPnetworking上存储对第三方设备的持续引用,其中设备的IP地址可以是静态的或者由DHCP随机分配的。 我不控制networking上的设备,也不能依赖现有的或与设备一起工作的DNS和其他特定networking协议。
所以我被指示调查使用硬件地址和ARP。 这将工作,但我不想重复的代码。 内核必须pipe理一个ARP表。 在Windows上,您可以使用GetIpNetTable等来访问它
我希望有一个API来回答这两个问题:
如果没有,那么我可能不得不手动做更多的事情:
的/ proc /净/ ARP
ķ
ARP表往往是相当地方和短暂的。 如果您检查协议,则通常只在给定的IP地址位于本地子网中时才提供真正的MAC地址。 否则,数据包被转发到本地路由器,然后负责转发它。
如果你在Windows上使用“ arp -g
”或者在UNIX上使用“ arp -a
”,你会看到这个表,但是由于上面提到的原因,我认为这对你没有好处。 那个命令和
这是真正的DNS,但是,正如你所说,它可能不适合你。
您可能必须在应用程序级别编写自己的“ARP”数据库。
至于ARP:
你可以使用system(“/ usr / bin / arp -option_of_choice”); 并解析输出,但这是一个丑陋的黑客。 – 不是我的建议。
查看/usr/include/linux/sockios.h – 在SIOCGARP,SIOCDARP和SIOCSARP详细信息中。 这些是你可以在Linux上管理ARP表的ioctls。 当然,你将不得不在socket fd上执行这些ioctl。 以下是一些示例: SIOCGARP示例
我相信你可以在其他几种语言中找到许多其他的例子。 我假设你正在使用C.
至于RARP:
Linux rarp联机手册的一句话是:“这个程序已经过时了,从2.3版本开始,Linux内核不再包含RARP支持。对于一个替代的RARP守护进程,请参阅ftp://ftp.demenatia.org/pub/net-工具”
所以你必须在目标系统上安装rarpd。