如何收集进程产生的网络连接日志信息?

发布于 2022-09-12 03:06:15 字数 329 浏览 15 评论 0

这边尝试过如下几种方式:
1、根据cn_proc拿到的pid去/proc/pid/net下去取,但这种只能拿到进程创建马上建立连接的日志,存在大量数据丢失,显然不太行
2、遍历/proc/net/tcp,netstat的逻辑,但是某些瞬时数据也可能拿不到,而且会比较消耗用户态io
3、netfilter内核框架写lkm,调研结果显示各个内核版本之间差异较大,不具备普适性

emmm 感觉以上这几种方式都不太行,感觉目前缺的是进程产生网络连接时的信号(回调也算),想请问下dalao们目前有哪些通用的技术手段能比较优雅的拿到进程产生网络连接数据的(技术选型这块auditd和系统调用hook这块暂时不考虑)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

草莓味的萝莉 2022-09-19 03:06:15

一些参考

方式1: 通过内核 tracepoint 跟踪 connect/accept 系统调用

bcc-tools 有几个工具可以参考

  • tcpconnect 监听主动发起的连接
  • tcpaccept 监听被动接受的连接

用 ebpf 实现比较简单,但是对内核版本有一定要求。没有 ebpf 的情况可以用 SystemTap,实在不行还能写内核模块直接跟踪 tracepoint。

方式2:LD_PRELOAD 替换 libc 的 connect/accept,但只能监听自己启动的进程。

方式3: iptable 日志,不好关联进程信息

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文