抓包工具tcpdump详细指南

目录

1. 核心功能与特性

2. 关键参数速查表

3. 基础命令

3.1 协议/端口过滤

3.2 IP 地址过滤

3.3 高级逻辑组合

3.4 控制输出详细度

3.5 解析包内容

3.6 特殊包过滤

3.7 限制抓包数量

3.8 过滤特定大小包

3.9 过滤提升性能

​​​​​​3.10 多网卡绑定

3.11 高级组合命令

4. 实战案例汇总

4.1 案例 1:捕获 TCP 三次握手

4.2 案例 2:监控特定主机流量

4.3 案例 3:抓取 HTTP GET 请求

4.4 案例 4:诊断 HTTP 500 错误

4.5 案例 5:定位 DNS 解析失败

4.6 案例 6:分析 TCP 连接超时

4.7 案例 7:实时提取 HTTP POST 表单中的密码字段

4.8 案例 8:HTTPS请求间歇性失败(证书链不完整)​

4.9 案例 9:网络带宽异常占用(广播风暴)​

5. 输出关键字段解析

6. 注意事项

6.1 权限要求

6.2 过滤技巧

6.3 输出优化


tcpdump 是一款开源的命令行网络数据包捕获与分析工具,广泛应用于网络故障诊断、性能优化和安全审计。

1. 核心功能与特性

  • 实时抓包
    基于 libpcap 库直接监听网卡流量,支持实时捕获和解析网络数据包,输出可读性强的文本信息。
  • 灵活过滤
    支持表达式语法,可按协议(如 tcp/udp)、IP 地址(src/dst)、端口(port)、协议标志位等精准过滤数据包。
  • 跨平台兼容
    原生支持类 Unix 系统(Linux、BSD 等),Windows 可通过 WinDump(需 WinPcap 驱动)实现同等功能。
  • 数据导出与分析
    支持将抓包数据保存为 .pcap 格式文件,便于 Wireshark 等工具深度分析。

2. 关键参数速查表

参数作用示例
-i指定监听网卡-i eth0(监听 eth0 网卡)
-c限制抓包数量,达到后自动停止抓包-c 10(捕获 10 个包后停止)
 -C 限制单个输出文件大小(单位 MB)。文件达上限后会创建新文件。-C 100 -W 5 -w traffic.pcap
-w保存至文件-w traffic.pcap
-r读取文件分析-r traffic.pcap
-s设置抓包长度(-s 0 捕获完整数据包-s 64(只抓前 64 字节)
-n禁用域名解析,不禁用端口解析显示原始 IP 而非域名
-nn禁用域名与端口解析显示原始 IP 和端口号
-v / -vv / -vvv

控制输出详细层级(逐级增强)

  • -v:显示 TTL、数据包长度等基础信息。

  • -vv:增加协议解码(如 NFS/SMB 细节)。

  • -vvv:最高冗余度(适用深度协议分析)。

-l

字母l,行缓冲输出,便于实时管道处理

(如配合 grep

tcpdump -l | grep 'keyword'
-X以十六进制+ASCII 码格式显示报文内容(含应用层数据)分析 HTTP 请求内容时使用。
-e显示数据链路层信息(如 MAC 地址、VLAN Tag)二层网络问题排查(如 ARP 欺骗分析)。
-A以 ASCII 格式显示数据(不显示链路层头部)快速查看文本协议(如 HTTP、FTP)。
--number为每个输出行添加序号。
-Q捕获特定方向流量:in(入站)、out(出站)或 inout(双向)。
-q-q 强制使用数字端口号,确保输出准确,而且便于 awkgrep 等工具处理

3. 基础命令

# 抓取所有网卡流量(Ctrl+C 停止)
tcpdump -i any

# 抓取特定网卡(eth0)流量
tcpdump -i eth0

# 抓包保存到文件(-w 写入,-r 读取)
tcpdump -i eth0 -w capture.pcap

# 读取分析
tcpdump -r capture.pcap 

3.1 协议/端口过滤

tcpdump tcp                  # 只抓 TCP
tcpdump udp port 53          # DNS 流量
tcpdump icmp                 # Ping 包
tcpdump port 80              # HTTP 流量
tcpdump portrange 8000-8080  # 端口范围

3.2 IP 地址过滤

tcpdump host 192.168.1.100    # 进出该 IP 的流量
tcpdump src 10.0.0.1          # 来源 IP
tcpdump dst 172.16.0.5        # 目标 IP
tcpdump net 192.168.1.0/24    # 整个子网

3.3 高级逻辑组合

tcpdump 'tcp port 80 and (src 192.168.1.5 or dst 192.168.1.5)'
tcpdump 'icmp and not src 10.0.0.1'  # 排除特定源

3.4 控制输出详细度

tcpdump -n    # 禁用主机名解析(只显示 IP)
tcpdump -nn   # 禁用端口解析(显示数字端口)
tcpdump -v    # 增加详细度
tcpdump -vvv  # 最高详细度(显示 TTL、校验和等)

3.5 解析包内容

tcpdump -A     # ASCII 格式显示(HTTP 内容)
tcpdump -X     # HEX+ASCII 格式(二进制协议)
tcpdump -XX    # 更完整的 HEX 输出

3.6 特殊包过滤

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'  # SYN/FIN 包
tcpdump 'tcp[13] & 4 != 0'  # RST 包
tcpdump 'ip[8] < 10'        # TTL < 10 的包(常用于 traceroute 检测)

3.7 限制抓包数量

tcpdump -c 1000             # 抓1000个包后停止

3.8 过滤特定大小包

tcpdump greater 1000   # 抓大于1000字节的包
tcpdump less 128       # 抓小于128字节的包

3.9 过滤提升性能

tcpdump 'ip and not net 192.168.0.0/24'  # 排除内网流量

​​​​​​3.10 多网卡绑定

tcpdump -i eth0 -i eth1  # 同时抓两个网卡

3.11 高级组合命令

# 组合技:详细解析+不解析+大小限制+保存文件
tcpdump -i eth0 -vvv -nn -s0 -c 1000 -w mysql_traffic.pcap 'tcp port 3306'

# 实时过滤 MySQL 查询
tcpdump -i any -s0 -l -A 'tcp port 3306 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x03000000' | grep -B1 -i "SELECT\|UPDATE"

# 实时过滤经过服务器443端口的所有流量
tcpdump -i any -nn -vv -X -s 0 port 443 -w  local_port_443.pcap

4. 实战案例汇总

4.1 案例 1:捕获 TCP 三次握手

场景:分析本地 HTTP 服务的连接建立过程。
命令

tcpdump -i lo -n tcp port 8080 and 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

输出解析

12:30:01.234 IP 127.0.0.1.12345 > 127.0.0.1.8080: Flags [S]  # SYN 请求
12:30:01.235 IP 127.0.0.1.8080 > 127.0.0.1.12345: Flags [S.] # SYN-ACK 响应  
12:30:01.236 IP 127.0.0.1.12345 > 127.0.0.1.8080: Flags [.]  # ACK 确认

4.2 案例 2:监控特定主机流量

命令

tcpdump -i eth0 host 192.168.1.100 and not port 22  # 过滤非 SSH 流量

用途:检查指定主机的网络活动,排除干扰流量。

4.3 案例 3:抓取 HTTP GET 请求

命令

tcpdump -s0 -A -n 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'  # 匹配 "GET "

说明
通过检测 TCP 载荷中的 GET 关键字捕获 HTTP 请求内容,-A 参数以 ASCII 显示载荷。

4.4 案例 4:诊断 HTTP 500 错误

tcpdump -i eth0 -s0 -A 'tcp port 80 and host 192.168.1.100'

分析要点

  • 检查服务端是否返回 HTTP/1.1 500

  • 查看请求头是否异常

  • 观察 TCP 序列号确认请求/响应完整性

4.5 案例 5:定位 DNS 解析失败

tcpdump -i any -nn -s0 'udp port 53'

关键检查

  • 客户端是否发出 DNS 查询

  • DNS 服务器是否响应

  • 响应是否包含 NXDOMAIN(域名不存在)

4.6 案例 6:分析 TCP 连接超时

tcpdump -i eth0 'host 10.0.0.5 and tcp port 3306'

诊断步骤

  1. 确认 SYN 包是否发出

  2. 是否收到 SYN-ACK

  3. 检查是否有重传([S] 标志重复出现)

  4. 观察窗口大小(win 值)是否过小

4.7 案例 7:实时提取 HTTP POST 表单中的密码字段

场景:
调试 Web 登录流程,确认密码是否明文传输。

sudo tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

输出示例:

POST /wp-login.php HTTP/1.1
Host: dev.example.com
log=admin&pwd=secret123&wp-submit=Log+In

关键分析:

- `-A`:以 ASCII 格式显示包内容。
- `-l`:行缓冲,保证实时输出。
- `egrep` 过滤出关键字段。

4.8 案例 8:HTTPS请求间歇性失败(证书链不完整)​

现象​:
用户反馈访问https://lmzf.example.com时出现ERR_SSL_PROTOCOL_ERROR,但浏览器控制台无明确错误信息。

​抓包分析​:

# 仅捕获SSL握手阶段 
tcpdump -i eth0 -nn -s0 'port 443 and (tcp[20](@ref)& 0x17 = 0x02)' -w ssl_handshake.pcap

​关键发现​:

  • 客户端发送Client Hello后,服务端未返回Server Hello,直接断开连接。
  • 使用Wireshark解析发现:服务端证书链缺少中间CA证书。

​根因定位​
服务端配置的SSL证书未包含完整的证书链(仅部署了叶子证书)。

解决方案​
重新生成证书文件,包含完整的证书链。

4.9 案例 9:网络带宽异常占用(广播风暴)​

现象​
服务器出口带宽突然飙升至95%,但业务流量无明显增长。

​抓包分析​

# 按流量排序捕获大包 
tcpdump -i eth0 -nn -q | head -1000 | awk '{print $3}' | sort | uniq -c | sort -nr

​关键发现​

  • 90%流量来自192.168.1.100ARP广播请求(每秒6000+次)
  • 目标MAC为全零ff:ff:ff:ff:ff:ff

​根因定位​
网络设备故障导致ARP表项丢失,触发大量广播请求。

​解决方案​

  • 修复交换机ARP表同步问题
  • 添加静态ARP绑定:arp -s 192.168.1.100 00:11:22:33:44:55

5. 输出关键字段解析

18:30:28.123456 IP 192.168.8.100.58218 > 10.0.0.8.80: Flags [S], seq 392665715, win 29200, options [mss 1460,sackOK,TS val 12345 ecr 0,nop,wscale 7], length 0
  • 时间戳18:30:28.123456(精确到微秒)

  • 方向> 表示流量方向

  • Flags[S]=SYN,[.]=ACK,[P]=PUSH,[F]=FIN

  • seq/ack:序列号/确认号(跟踪数据流关键)

  • win:窗口大小(流量控制指标)

  • length:数据载荷长度

6. 注意事项

6.1 权限要求

需使用 sudo 或 root 权限执行(因需访问网卡)。

6.2 过滤技巧

  • 组合条件:and/or(如 port 80 or port 443)。
  • 排除干扰:not(如 not arp)。

6.3 输出优

  • 添加 -tttt 显示完整时间戳。
  • 使用 -l 使输出可实时管道传输(如 tcpdump -l | grep 'pattern')。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值