我的目标是监控套接字并将它们与创建它们的应用程序联系起来
我知道netstat,ss,lsof等,他们可以列出所有套接字及其应用程序。
而且我也知道我可以解析/proc/net/tcp
来获取套接字并将它们与/proc/(PID)
的应用程序联系起来,这正是这些工具所做的或他们使用netlink套接字。
我的研究给我带来了article,它解释了如何通过inet_diag协议使用netlink从内核获取所有套接字。用户空间程序设置inet_diag类型的netlink套接字并向内核发送请求。响应包含几个包含套接字和其他相关信息的消息 这非常简洁,但不幸的是内核每次请求只发送一次这个信息。所以我必须不断“轮询”。
进一步的研究将我带到了另一个article,它连续监视带有netlink路由套接字的接口的IP变化。套接字绑定到多播组,然后在无限循环中从中读取消息。
所以我调查了inet_diag套接字是否存在相同的可能性。不幸的是,我真的无法理解内核代码。但据我所知,这个套接字系列没有组播组。
此时我陷入困境,我需要知道这种方法是否可行,或者有人知道其他任何提示。
答案 0 :(得分:0)
如果您提到的每种工具都无法满足您的要求,则可以尝试dtrace
。