lsof -i 需配合 -r 参数实现周期轮询(如 -r2),并叠加 -n、-P、grep 和 awk 过滤,聚焦非环回的 ESTABLISHED/SYN_SENT 出站连接,结合进程行为、路径、UDP 异常等交叉验证木马。

用 lsof -i 抓住木马的出站连接,但默认不实时
lsof -i 本身不带轮询能力,直接运行只输出当前快照。木马回传往往短连接、高频、随机端口,单次扫描极易漏掉。必须配合 -r 参数实现周期重查——比如每2秒刷新一次:lsof -i -r2。注意:该参数要求 root 权限,且高频率轮询会增加系统负载,生产环境建议从 -r5(5秒)起步观察。
过滤掉干扰项,聚焦可疑出站连接
木马回传最典型特征是「非标准端口 + ESTABLISHED 状态 + 非可信远端 IP」。不要依赖 lsof -i 原始输出,要加条件筛:
-
-n:跳过 DNS 解析,避免卡在反向查询上,也防止木马控制的 DNS 服务干扰判断 -
-P:显示端口号而非服务名(如显示:443而非:https),避免服务名被伪造混淆 -
grep -E "(ESTABLISHED|SYN_SENT)":只保留已建立或正在握手的连接,排除监听端口(LISTEN)干扰 -
awk '$9 !~ /localhost|127\.0\.0\.1|::1/ {print}':剔除本地环回流量,专注外网通信
组合命令示例:lsof -i -n -P -r2 | grep -E "(ESTABLISHED|SYN_SENT)" | awk '$9 !~ /localhost|127\.0\.0\.1|::1/ {print $1,$2,$9}'
识别木马连接的关键信号不是端口,而是行为模式
单纯盯 :53 或 :443 容易误判——合法程序也会用这些端口。真正危险信号包括:
- 同一进程短时间内反复连接不同 IP(尤其 CIDR 范围外的散列地址)
- 连接目标 IP 不在企业白名单内,且无对应业务域名解析记录(可用
nslookup快速验证) - 连接源端口为高位随机端口(如
52489、61234),而目标端口非常规(如:8080、:31337) - 进程名异常:如
sh、bash、curl、wget等通用工具长期维持连接,或进程名含随机字符串(svchost_abc123)
此时应立刻用 lsof -p 查该进程打开的全部文件,重点看 cwd(工作目录)、txt(执行文件路径)、mem(加载的库),确认是否来自 /tmp、/dev/shm 或无写权限目录。
别忽略 UDP 连接和 DNS 隧道
很多木马用 UDP 回传(如 DNS 隧道),lsof -i 默认包含 UDP,但需主动识别:
- DNS 隧道常表现为大量发往同一 DNS 服务器(如
8.8.8.8、1.1.1.1)的UDP *:53请求,源端口随机,且无对应tcp连接 - 用
lsof -i udp -n -P单独抓 UDP 流量,再结合netstat -s -u看 UDP 数据包统计突增 - 若发现某进程频繁向非本地 DNS 服务器发 UDP 包,立即用
strace -p动态抓包内容-e trace=sendto,recvfrom -s 256
lsof -i是入口,但不能只信它一眼看到的字段;真实木马连接往往藏在进程行为、文件路径、网络节奏的细微异常里,得交叉验证。











