Linux 如何在用户空间deamon中使用netlink监控内核arp表?

Linux 如何在用户空间deamon中使用netlink监控内核arp表?,linux,sockets,netlink,Linux,Sockets,Netlink,我知道我们可以使用带有RTM_F_NOTIFY标志的“NETLINK_ROUTE”套接字来通知用户是否根据RFC3549更改了路由。但我找不到一种方法在arp表发生变化时通知用户 PS:我使用linux内核3.0.6我不知道纯arp通知,但您可以使用arpd,它在用户空间中运行,适用于arp表非常大的情况。如果您使用arpd并对其进行修改,您可以让它向您发送arp表更改通知。我不知道纯arp通知,但您可以使用arpd,它在用户空间中运行,适用于arp表非常大的情况。如果您使用arpd并对其进行修

我知道我们可以使用带有RTM_F_NOTIFY标志的“NETLINK_ROUTE”套接字来通知用户是否根据RFC3549更改了路由。但我找不到一种方法在arp表发生变化时通知用户


PS:我使用linux内核3.0.6

我不知道纯arp通知,但您可以使用arpd,它在用户空间中运行,适用于arp表非常大的情况。如果您使用arpd并对其进行修改,您可以让它向您发送arp表更改通知。

我不知道纯arp通知,但您可以使用arpd,它在用户空间中运行,适用于arp表非常大的情况。如果您使用arpd并对其进行修改,您可以让它向您发送有关arp表更改的通知。

如果我理解正确,我建议您分析“ip”程序的来源。当您运行“ip监视器”并添加或删除任何ARP条目时,“ip监视器”将向您显示相应的消息。

如果我理解正确,我建议您分析“ip”程序的来源。当您运行“ip监视器”并添加或删除任何ARP条目时,“ip监视器”将显示相应的消息。

应使用
NETLINK\u ROUTE
socket和
bind()
对组
RTNLGRP\u NEIGH

之后,您可以使用
recv()
获得
ndmsg
通知。请注意,必须使用所有通知,否则套接字将在溢出后引发下一个
recv()
异常

或使用外部
ip(8)
实用程序:

$ ip monitor all    # get all the notifications
$ ip monitor neigh  # get only arp notifications
或者使用Python:


应使用
NETLINK\u ROUTE
socket和
bind()
到组
RTNLGRP\u NEIGH

之后,您可以使用
recv()
获得
ndmsg
通知。请注意,必须使用所有通知,否则套接字将在溢出后引发下一个
recv()
异常

或使用外部
ip(8)
实用程序:

$ ip monitor all    # get all the notifications
$ ip monitor neigh  # get only arp notifications
或者使用Python: