You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何监控特定进程产生的所有网络流量?

监控并记录特定进程网络流量的方法

以下是几种实用方案,满足按进程(PID/用户)过滤、端口过滤及流量记录的需求:

1. lsof + tcpdump 组合方案

先通过lsof定位进程关联的网络连接信息,再用tcpdump精准捕获流量:

  • 查找目标进程(PID为1234)的所有网络连接:
    lsof -i -P -n -p 1234
    
    参数说明:-i显示网络连接,-P不解析端口名称,-n不解析IP地址,-p指定目标进程PID。
  • 从输出中提取本地/远程端口(例如80、443),用tcpdump捕获并记录流量:
    tcpdump -i eth0 port 80 or port 443 -w process_traffic.pcap
    
    若按用户过滤,先获取该用户的所有进程PID:pgrep -u username,再重复上述步骤。

2. nethogs 实时监控+记录

nethogs直接按进程维度展示实时流量,支持端口过滤,也可导出记录:

  • 实时监控指定网卡(eth0)的进程流量:
    nethogs eth0
    
    界面会显示进程PID、程序名、上传/下载速率及连接端口。
  • 过滤特定端口(如80)并记录到文件:
    nethogs -p 80 eth0 -t > traffic_log.txt
    
    -t参数以文本格式输出,方便后续分析。

3. strace 追踪进程网络系统调用

strace可捕获进程发起的所有网络相关系统调用(如connect、send、recv),详细记录每一次网络交互:

  • 追踪目标进程(PID为1234)的网络调用:
    strace -e trace=network -p 1234 -o process_network.log
    
    -e trace=network仅追踪网络类系统调用,-o将输出写入指定文件。
  • 如需过滤端口,可结合grep:
    strace -e trace=network -p 1234 2>&1 | grep '80\|443'
    

4. bpftrace 高效eBPF追踪

基于eBPF的bpftrace性能损耗极低,适合长期监控,支持复杂的进程+端口过滤:

  • 追踪PID为1234的进程发起的所有TCP连接:
    bpftrace -e 'tracepoint:tcp:tcp_connect { if (pid == 1234) printf("PID %d 连接到 %s:%d\n", pid, args->saddr, args->dport); }'
    
  • 过滤特定目标端口(如80)并记录:
    bpftrace -e 'tracepoint:tcp:tcp_connect { if (pid == 1234 && args->dport == 80) printf("PID %d 连接到 %s:%d\n", pid, args->saddr, args->dport); }' > tcp_connect.log
    

5. iptables标记+ tcpdump过滤

通过iptables给特定进程/用户的流量打标记,再用tcpdump捕获标记后的流量:

  • 给用户username的输出流量打标记(标记值100):
    iptables -A OUTPUT -m owner --uid-owner username -j MARK --set-mark 100
    
  • 捕获标记为100的流量并记录,同时过滤端口80:
    tcpdump -i eth0 fwmark 100 and port 80 -w marked_traffic.pcap
    

内容的提问来源于stack exchange,提问作者use56132

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:21:58