![]() | 1 xucancan 2024-01-30 15:51:59 +08:00 可以用 strace 实现一个小工具 |
![]() | 2 lechain 2024-01-30 15:56:42 +08:00 ![]() 你是不是在寻找 ebpf ?/doge |
3 Supershell OP @xucancan strace 确实可以实现这样的功能,通过跟踪进程的流量日志,我想实现的是从流量特征定位具体进程,strace 所有进程我先去研究一下,感谢提示。还有一个工具可能跟 strace 相似,不过梗简便,就是 yara 。 |
4 en1ac 2024-01-30 16:11:59 +08:00 有个叫 zeek 的流量分析工具,可以通过写 lua 脚本来进行流量分析 |
5 dode 2024-01-30 16:18:56 +08:00 hook linux 系统 dns 接口 |
6 mawen0726 2024-01-30 16:58:43 +08:00 iftop 能监听流量,看到是什么 ip 什么端口的流量,不知道适不适合你的场景 |
7 NessajCN 2024-01-30 17:08:22 +08:00 |
8 c5QzzesMys8FudxI 2024-01-30 17:53:49 +08:00 @Supershell yara 可以吗?我咋感觉 yara 不行。 |
![]() | 9 xucancan 2024-01-30 20:43:19 +08:00 ![]() @Supershell 个人的浅薄理解仅供参考 到了网络传输层面操作系统的进程信息是丢失的,举个例子,从路由器层面可以观测到主机哪个主机对哪些域名进行访问( dns 查询数据是明文的),但不包含进程相关的信息,因为网络通讯和进程属于两个不同的域,上下文是不互通的,也确实不需要 横向比较,题主目的有点像 GFW 识别翻墙流量,有从流量特征层面识别的方法,例如 LTS in LTS 的包长度特征,或者代理协议的握手特征,但这都是基于“明确证明目标”的,但对于你的场景可能问题都无法被描述 |
![]() | 10 xucancan 2024-01-30 20:49:53 +08:00 ![]() @Supershell 综上,我觉得首先要明确问题的解决域,它是操作系统和网络交集区域,那么对于 Linux 来讲就是系统内核了,所以 strace 、epbf 这类工具看起来是比较合适的 |
11 salmon5 2024-01-30 22:01:55 +08:00 ![]() |
![]() | 12 IceFox99 2024-01-30 22:14:46 +08:00 知道恶意的域名就好说了,tcpstat 或者 tcpdump 根据域名 ip 写一下 filter expression ,然后只要检测到输出就 hook 到 netstat 或者 ss 上,然后输出那一瞬间的所有 socket 的端口,通信和进程信息,应该足够用了。应该用不到 strace ,epbf 这类内核工具,感觉写个 Shell script 就够用了。 我自己就拿 tcpstat 和 chart.js 写过一个把流量按端口,网卡(默认和 vpn 虚拟网卡等等),IP 等等信息分类显示的网页小组件,用来分辨 nas 上 bt,nginx,samba,webdav 等各种流量以及各种用户的实时速度,这种思路是可行的而且效果还行。 |
13 salmon5 2024-01-30 22:20:04 +08:00 ![]() |
14 salmon5 2024-01-30 22:29:09 +08:00 |
15 Supershell OP @xucancan 确实如你所说,本是两个维度的事情,没有关联性,无法从流量上面关联进程,我想只能主动监听所有系统进程来实现我的需求,不过这样对主机的资源性能就不友好了。相当于装了一个杀软,实时监控系统进程,但这样就有点重,如果能有个轻量级的就好了。 |
![]() | 16 dhb233 2024-01-31 10:11:01 +08:00 如果要不漏的获取每一个,应该就是 ebpf 这种了。一般发包用的是进程的上下文,ebpf 过滤到特定报文的时候,获取下当前进程号,如果不是常驻进程,还要获取 cmd 之类的?至少要知道执行的哪个文件吧。 tcpdump 再用 ss 分析,也是可以的,但是可能会漏。毕竟有个延迟,可能请求的进程已经不在了 |
![]() | 17 dhb233 2024-01-31 10:11:45 +08:00 用 ebpf 这种,性能应该不是什么大的问题,性能影响相当于多加了一条 iptables 规则 |
18 salmon5 2024-01-31 11:02:21 +08:00 |