如何收集进程产生的网络连接日志信息?
这边尝试过如下几种方式:
1、根据cn_proc拿到的pid去/proc/pid/net下去取,但这种只能拿到进程创建马上建立连接的日志,存在大量数据丢失,显然不太行
2、遍历/proc/net/tcp,netstat的逻辑,但是某些瞬时数据也可能拿不到,而且会比较消耗用户态io
3、netfilter内核框架写lkm,调研结果显示各个内核版本之间差异较大,不具备普适性
emmm 感觉以上这几种方式都不太行,感觉目前缺的是进程产生网络连接时的信号(回调也算),想请问下dalao们目前有哪些通用的技术手段能比较优雅的拿到进程产生网络连接数据的(技术选型这块auditd和系统调用hook这块暂时不考虑)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一些参考
方式1: 通过内核 tracepoint 跟踪 connect/accept 系统调用
bcc-tools 有几个工具可以参考
用 ebpf 实现比较简单,但是对内核版本有一定要求。没有 ebpf 的情况可以用 SystemTap,实在不行还能写内核模块直接跟踪 tracepoint。
方式2:LD_PRELOAD 替换 libc 的 connect/accept,但只能监听自己启动的进程。
方式3: iptable 日志,不好关联进程信息