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

Bus*_*Joe 7 linux linux-kernel netlink

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

我的研究给我带来了一篇文章,解释了如何通过inet_diag协议从netlink获取内核的所有套接字.用户空间程序设置inet_diag类型的netlink套接字并向内核发送请求.响应由几个包含套接字和其他相关信息的消息组成.
这非常简洁,但不幸的是内核每次请求只发送一次这个信息.所以我必须不断"轮询".

进一步的研究让我看到另一篇文章,它连续监视netlink路由套接字的IP接口变化.套接字绑定到多播组,然后在无限循环中从中读取消息.

所以我调查了inet_diag套接字是否存在相同的可能性.不幸的是,我真的无法理解内核代码.但据我所知,这个套接字系列没有组播组.

此时我陷入困境,我需要知道这种方法是否可行,或者有人知道任何其他提示.

小智 0

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