必须用 -i lo,因为本地环回流量由内核在协议栈内部直接转发,不经过物理网卡,tcpdump 默认监听非环回接口(如eth0),只有显式指定lo才能捕获127.0.0.1或localhost的进程间通信。

要抓取本地环回流量,必须明确指定 lo 接口——这是 Linux 中环回网络的专用接口,其他网卡(如 eth0、ens33)无法捕获本机进程间通过 127.0.0.1 或 localhost 的通信。
为什么必须用 -i lo
本地环回流量不经过物理网卡,而是由内核在协议栈内部直接转发。tcpdump 默认监听第一个非环回接口(比如 eth0),因此不会看到任何 localhost 流量。只有显式指定 -i lo 才能进入环回接口的抓包路径。
基础抓包命令
以下命令可实时查看本机进程间的 HTTP、数据库、API 调用等环回通信:
-
sudo tcpdump -i lo -nn:显示所有环回包,IP 和端口以数字形式呈现,避免解析延迟 -
sudo tcpdump -i lo -c 20 -nn:只抓 20 个包后自动退出,适合快速验证 -
sudo tcpdump -i lo -nn port 8080:聚焦本机 8080 端口的进出流量(如本地开发服务器) -
sudo tcpdump -i lo -nn 'tcp[tcpflags] & tcp-syn != 0':只抓 TCP 连接建立阶段的 SYN 包,排查连接发起情况
保存与后续分析
环回流量常用于调试本地服务(如 Docker 容器间通信、微服务调用),建议保存为 pcap 文件供 Wireshark 深入查看:
-
sudo tcpdump -i lo -s 0 -w loopback.pcap port 5432:完整捕获本机 PostgreSQL(5432)的全部环回交互(-s 0确保不截断数据) -
tcpdump -r loopback.pcap -nn:离线读取并打印内容,无需 root 权限
常见注意事项
环回抓包有几个容易被忽略的关键点:
- 必须加
sudo:lo 接口抓包需要 CAP_NET_RAW 权限 - 避免用
host 127.0.0.1单独过滤:环回包源/目的地址可能含 ::1(IPv6)或 127.0.0.1,更稳妥的是直接结合端口或协议过滤 - 若看不到预期流量:确认目标进程确实绑定在 127.0.0.1(而非 0.0.0.0 或具体局域网 IP),可用
ss -tlnp | grep :端口验证











