我的目标是监视套接字并将它们与创建它们的应用程序相关联。
我知道 netstat、ss、lsof 等,他们可以列出所有套接字及其应用程序。
而且我也知道我可以解析/proc/net/tcp
以获取套接字并将它们与应用程序相关联/proc/(PID)
,这正是这些工具所做的,或者它们使用 netlink 套接字。
我的研究使我看到了一篇文章,该文章解释了如何通过 inet_diag 协议使用 netlink 从内核获取所有套接字。用户空间程序建立一个 inet_diag 类型的 netlink 套接字并向内核发送请求。响应由几条消息组成,其中包含套接字和其他相关信息。
这真的很简洁,但不幸的是内核在每个请求中只发送一次这个信息。所以我必须不断地“投票”。
进一步的研究让我看到了另一篇文章,该文章使用 netlink 路由套接字持续监控接口的 IP 变化。套接字绑定到一个多播组,然后在无限循环中从中读取消息。
因此,我调查了 inet_diag 套接字是否存在相同的可能性。不幸的是,我并不能真正理解内核代码。但据我所知,这个套接字系列没有多播组。
在这一点上,我被困住了,我需要知道这种方法是否可行,或者有人知道任何其他提示。