tcpdump 应该掌握的抓包技巧

tcpdump 是 Linux/Unix 系统的网络抓包分析神器。它能像监控摄像头一样,实时捕获流经网卡的数据包,并将这些二进制数据翻译成可读信息。无论是排查网络故障、分析协议交互,还是安全检测,它都是工程师工具箱里的“瑞士军刀”。

一、语法

复制
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ --number ] [ -Q|-P in|out|inout ] [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ --time-stamp-precision=tstamp_precision ] [ --immediate-mode ] [ --version ] [ expression ]1.2.3.4.5.6.7.8.9.10.11.12.

二、常见参数

-i:指定网卡(如 -i eth0),-i any 监听所有接口-c:限制抓包数量(如 -c 100 捕获100个包后停止)-s:设置抓包长度(-s 0 捕获完整数据包)-w:保存到文件(如 -w capture.pcap)-d:把编译过的数据包编码转换成可阅读的格式-e:用来显示源、目标ip的mac地址-r: 读取文件分析-n:禁用域名解析,直接显示IP-l:开启行缓冲模式-A/-X:ASCII或十六进制格式显示内容

三、过滤表达式

1. 主机、网络与端口过滤:host:主机,如host 192.168.1.100net:网络,如net 192.168.1.0/24port:端口,如port 80或port http2. 协议过滤

tcp、udp、arp、rarp、icmp、ssh、telnet、ntp、ftp等等

3. 方向过滤

src、dst、src and dst、dst or src、in、out、inout

4. 逻辑组合

and/or/not(&& || !):如 src host 192.168.1.100 and dst port 443

四、场景举例

抓包立即写入磁盘:

复制
tcpdump -i eth0 -U -w live.pcap1.

捕获特定主机的HTTP/HTTPS流量:

复制
tcpdump -i eth0 -n src host 192.168.1.1 and (dst port 80 or 443) and tcp1.

抓取来自源地址为192.168.1.100的主机发送的icmp报文:

复制
tcpdump -i eth0 -nn icmp and src host 192.168.1.1001.

监控网卡 eth0,捕获IP 192.168.1.100 发出的、基于TCP协议的、HTTP流量(端口80),直接显示IP地址和端口号,并打印数据包中的明文内容:

复制
tcpdump -i eth0 -nnA port 80 and tcp and src host 192.168.1.1001.
1. -Q (--direction):流量方向控制

只抓取进入网卡的流量 (Inbound):

复制
tcpdump -i eth0 -Q in -nn tcp port 221.

抓取发送到主机192.168.1.100的icmp报文:

复制
tcpdump -i eth0 -Q out -nn host 192.168.1.100 and icmp1.

等同于:

复制
tcpdump -i eth0 -nn dst host 192.168.1.100 and icmp1.
2. -tttt:打印完整可读时间戳

捕获ssh连接流量,并使用标准时间格式输出:

复制
tcpdump -tttt -i eth0 port 221.

-e 用来显示源、目标ip的mac地址:

复制
tcpdump -i eth0 -e arp1.

协议与端口组合,抓取端口80或443且协议为TCP的报文:

复制
tcpdump -i eth0 -n tcp and (port 80 or port 443) -vvv1.
3. -vvv:获取更详细的输出信息

抓取TCP握手异常 (SYN无响应)的报文:

复制
tcpdump -i eth0 -n tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 01.

实时提取IP地址为192.168.1.100的HTTP报文:

复制
tcpdump -i eth0 -l -A -s0 port 80 | grep -i 192.168.1.1001.

捕获进出IP为192.168.1.100的HTTPS流量,每文件100MB,保留最后10个文件,带纳秒时间戳:

复制
tcpdump -i eth0 -Q inout -nn host 192.168.1.100 and port 443 \ -C 100 -W 10 -w https_trace.pcap \ --time-stamp-precision nano \ -z gzip # 自动压缩完成文件1.2.3.4.

💡 趣味冷知识:tcpdump 诞生于 1987 年,比万维网(WWW)还早 4 年!它的设计理念至今仍影响着现代网络分析工具。

THE END