使用netlink inet_diag进行实时套接字监控

我的目标是监视套接字并将它们与创build它们的应用程序相关联。
我知道netstat,ss,lsof等,他们可以列出所有套接字与他们的应用程序。
而且我也知道我可以parsing/proc/net/tcp来获取套接字并将它们与/proc/(PID)关联起来,这正是这些工具或者它们使用的netlink套接字。

我的研究使我得到了一篇文章 ,解释了如何通过inet_diag协议通过netlink从内核获取所有套接字。 用户空间程序设置inet_diagtypes的netlink套接字,并向内核发送请求。 响应包含几个包含套接字和附加相关信息的消息。
这真的很整洁,但不幸的是内核每次请求只发送一次这个信息。 所以我必须不断地“轮询”。

进一步的研究带给了我另一篇文章 ,它不断监测着netlink路由套接字的IP变化。 套接字绑定到多播组,然后在无限循环中从中读取消息。

所以我调查了inet_diag套接字是否有相同的可能性。 不幸的是我不能真正理解内核代码。 但据我所知,这个套接字家族没有组播组。

在这一点上,我被卡住了,我需要知道这种方法是否可行或有人知道任何其他提示。

如果你提到的每一个工具都不能满足你的要求,你可以试试dtrace