首页/网络/网络排障速查/按载荷字节匹配(HTTP 方法/关键字)

按载荷字节匹配(HTTP 方法/关键字)

需要「只抓带某段内容的包」时按字节偏移匹配:经典用法是匹配 HTTP 请求行(GET/POST)与响应状态行,用于抓特定 API 或特定错误码。

网络排障速查网络更新于 2026-10-12

载荷匹配

载荷匹配
# 匹配 HTTP GET 请求(tcpdump 手册示例的写法):
tcpdump -nn -i eth0 -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
# 匹配 "POST":
tcpdump -nn -i eth0 -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
# 匹配 HTTP 响应 404("HTTP/1.1 404" 中的 404 段):
tcpdump -nn -i eth0 -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2)+9:3] = 0x343034'
原理tcp[12:1] & 0xf0 >> 2 = TCP 头长度,即载荷起点
十六进制GET=47455420、POST=504f5354、404=343034
前提需 -s 0 抓全包,且连接未加密(HTTP 明文)
HTTPS 流量无法用载荷匹配(加密);这类需求要么在 TLS 终止点之后抓,要么改用 SNI/域名维度过滤。

易错点

  • 用固定偏移(如 tcp[32:4])匹配载荷:TCP 选项长度可变导致偏移错位
  • 对 HTTPS 流量做载荷匹配,永远抓不到,白白怀疑工具

数据来源与参考

  • pcap-filter(7):按字节取值的表达式(示例 GET)
  • RFC 9112:HTTP/1.1 报文格式

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌