tcpdump默认捕获指定网络接口上所有流经的流量(含入站和出站),不区分方向;可通过src/dst过滤实现单向抓取,如sudo tcpdump -i eth0 src host 192.168.1.5捕获出站、dst host 192.168.1.5捕获入站。

tcpdump 默认捕获的是经过指定网络接口的所有流量,包括入站(inbound)和出站(outbound)数据包——只要这些包流经该接口,无论方向如何,都会被记录。
它本身不区分“入站”或“出站”语义,而是按网络层视角抓取链路层可见的原始帧。但你可以通过过滤表达式,结合 src(源)、dst(目标)等关键字,间接分离出更接近“入站”或“出站”的流量:
? 如何理解“入站”和“出站”在 tcpdump 中的对应逻辑
出站流量 ≈ 数据包的 源 IP 是本机 IP
(即你这台机器主动发起的连接:比如 curl 访问百度、ssh 连远程服务器)入站流量 ≈ 数据包的 目标 IP 是本机 IP
(即其他机器发给你的请求:比如别人访问你搭的 Web 服务、SSH 登录你)
注意:
host xxx是双向匹配(src 或 dst),而src/dst是单向限定,更精确。
✅ 常用命令示例
捕获所有经过 eth0 的流量(含入站 + 出站)
sudo tcpdump -i eth0
只看「出站」——源地址是本机(假设本机 IP 是 192.168.1.5)
sudo tcpdump -i eth0 src host 192.168.1.5
只看「入站」——目标地址是本机
sudo tcpdump -i eth0 dst host 192.168.1.5
同时显示入站 + 出站,但标注方向(加 -nn 提升可读性)
sudo tcpdump -i eth0 -nn 'src host 192.168.1.5 or dst host 192.168.1.5'
捕获并保存全部流量(推荐用于后续分析)
sudo tcpdump -i eth0 -w all_traffic.pcap
之后可用 Wireshark 或 tcpdump -r all_traffic.pcap 查看。
⚠️ 小提醒
- 不指定
-i时,tcpdump 会选第一个非环回接口(通常是 eth0 或 enp0s3),不一定是你想要的网卡,建议始终显式指定。 - 用
-n或-nn避免 DNS 查询拖慢抓包,也防止输出混乱。 - 如果想确认本机所有 IP,可用
ip addr show或hostname -I。 - 环回接口(lo)上的流量需单独抓:
sudo tcpdump -i lo,它不经过物理网卡,常被忽略。
不复杂但容易忽略










