tcpdump 使用
我们可以把 tcpdump 的命令结构标准地划分为 三大部分:
sudo tcpdump [1. 控制参数] [2. 抓取范围] "[3. 过滤表达式]"
第一段:控制参数(控制“怎么显示/怎么处理”)
这一段緊跟在 tcpdump 后面,主要用来控制数据的输出格式、运行性能或者是否保存文件。它们通常是以 - 开头的单字母参数。
最常用的控制参数:
-nn:最核心。 第一个n表示不把 IP 解析成域名,第二个n表示不把端口号解析成服务名(比如 80 不显示成 http)。这样不仅看起直观,还能防止因为 DNS 解析卡死。-v/-vv/-vvv:显示更详细的报文信息(比如 TTL、报文长度等)。-X:同时以十六进制和 ASCII 码(明文文本)打印报文内容,看应用层数据必备。-w filename.pcap:不打印到屏幕,直接保存到文件,后续可以用 Wireshark 打开。-c 100:抓满 100 个包就自动退出。
第二段:抓取范围(控制“在哪里抓”)
这一段用来告诉 tcpdump 应该去哪张网卡或者哪个接口去捞数据。
最常用的抓取参数:
-i any:最省心的写法,监听机器上的所有网卡(包括物理网卡、虚拟网卡、本地回环lo)。-i eth0/-i en0:指定只抓某一张具体的网卡。
第三段:过滤表达式(控制“抓什么内容”)
这是 tcpdump 最强大的地方,它通过 “关键字 + 逻辑运算符” 来精准过滤流量。为了防止特殊字符被 Shell 解析,这一段建议用单引号或双引号包起来。
这一段内部通常由以下三个维度自由组合:
1. 协议(Protocol)
ip,ip6,tcp,udp,icmp,icmp6
2. 方向/目标(Type & Dir)
host 192.168.1.1(指定 IP)net 192.168.1.0/24(指定网段)port 10000(指定端口)- 配合方向词:
src port 10000(源端口)或dst port 10000(目的端口)
3. 逻辑连接符(And / Or / Not)
and(且):必须同时满足。or(或):满足其中一个就行。not(非):排除特定流量。
举例
sudo tcpdump -nn -X -i any "ip6 and port 10000"
└──┬──┘ ──┬─── ──────────┬─────────
控制 范围 过滤条件
(格式/内容) (所有网卡) (IPv6 且 端口 10000)
参考
https://www.cnblogs.com/chyingp/p/linux-command-tcpdump.html
Read other posts