如何在linux中查找netlink操作的来源?

如何在linux中查找netlink操作的来源?

我的网络接口发生了无法解释的变化。有人删除了我手动附加的 IP 地址。我可以在执行以下操作时看到它ip -d monitor

[…]
Deleted local 192.168.111.3 dev eth0 table local proto kernel scope host src 192.168.111.3
[…]

我看到有很多进程带有 netlink 套接字 ( wc -l /proc/net/netlink)。其中一些是 systemd,所以我怀疑有些进程试图通过“声明”网络接口的所有权来“聪明地”删除其所有设置以设置自己的设置。不管是什么,我都想阻止它这样做,但我需要先找到它。

我怀疑是 systemd,它确实有几个netlink套接字。

答案1

事实证明,pid在 Netlink 消息中ip monitor,虽然记录的意思是“端口 ID”,但实际上是进程 ID。

将会有一些垃圾需要手动处理,但是如果执行以下操作,可以看到 pid:

strace -erecvmsg ip monitor dev eth0 > /dev/null

对于将来想要为此制作专用工具的人,我首先建议在现有ip工具中添加显示 PID 的功能。如果没有,那么从阅读netlink(7)手册rtnetlink(7)页开始。

相关内容