使用code/Python读取Linux ARP表的最精简方法

2024-10-16 20:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在Linux上运行的Python脚本,它需要反复可靠地读取ARP表,以便检查一些IP-MAC关联。我正在评估可能的选项,并想知道其中哪一个是最精简/最干净的-主要是在性能和开销方面

以下是我目前关注的问题:

  1. 使用subprocess运行arp -an并解析输出
  2. 读取/proc/net/arp并解析输出(与#1类似,但获取底层数据的方式不同;像python_arptable这样的库正好可以做到这一点)
  3. 打开套接字并使用SIOCGARPioctl系统调用轮询ARP表(perhttp://man7.org/linux/man-pages/man7/arp.7.html)。我还没有针对这一点的Python实现,但我相信这是可行的
  4. 使用subprocess运行ip neighbor list并解析输出
  5. 使用类似于pyroute2的Python网络链接库读取该表

如果我没有弄错的话,选项1和选项2直接从内核缓存读取表,选项4和选项5使用netlink调用;我不太确定3号落在哪里

有一段时间我在做#5,特别是使用pyroute2,但遇到了一些可靠性问题;e、 g.绝对存在的ARP条目未列出。我有一种感觉,pyroute2对于手头的简单任务来说可能有点太强大了。我目前正在做#2,目前看来效果不错——但不知道是否有更好的方法

虽然我的实现语言是Python,但我相信这个问题并不是非常特定于语言的。我想就以上的优点和缺点提出一些建议。具体而言:

  • 运行命令并读取其输出或从/proc读取文件更好吗?(选项1与选项2)
  • 老派内核vs新时代网络链接?(#1/2 vs#4/5)
  • ioctl方法(#3)与其他方法相比如何

Tags: 方法ip网络脚本语言linux选项proc