8

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

我的研究使我看到了一篇文章,该文章解释了如何通过 inet_diag 协议使用 netlink 从内核获取所有套接字。用户空间程序建立一个 inet_diag 类型的 netlink 套接字并向内核发送请求。响应由几条消息组成,其中包含套接字和其他相关信息。
这真的很简洁,但不幸的是内核在每个请求中只发送一次这个信息。所以我必须不断地“投票”。

进一步的研究让我看到了另一篇文章,该文章使用 netlink 路由套接字持续监控接口的 IP 变化。套接字绑定到一个多播组,然后在无限循环中从中读取消息。

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

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

4

2 回答 2

0

您可以使用 kprobe 内核模块来挂钩所有连接系统调用,它监视套接字并将它们与创建它们的应用程序相关联

和Elkeid一样,Elkeid Driver 通过 Kprobe 钩住内核函数,提供丰富准确的数据采集能力,包括内核级进程执行探测、提权监控、网络试听等。Driver 通过支持 Linux 命名空间,将基于容器的监控视为基于主机的数据收集的一等公民。与市场上的用户空间代理相比,Elkeid 提供了更全面的信息,性能大幅提升。

于 2021-12-30T11:27:41.713 回答
-1

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

于 2013-08-31T03:23:19.350 回答