首页/网络/抓包与流量分析速查/tcpdump tcpflags 标志位过滤

tcpdump tcpflags 标志位过滤

用 tcp[tcpflags] 读取 TCP 标志字节,与 tcp-syn/tcp-ack/tcp-fin/tcp-rst/tcp-push 等名字按位运算,精确抓取某类标志组合的包。

用途按 TCP 标志位按位过滤
语法tcp[tcpflags] & <标志> != 0(或 = <组合>)

常用示例

常用示例
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'          # 曾出现 SYN
tcpdump -i eth0 -nn 'tcp[tcpflags] = tcp-syn'                  # 纯 SYN(建连请求)
tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn|tcp-ack'  # SYN-ACK
tcpflags 位于 TCP 头第 14 字节起(tcp[tcpflags] 即 tcp[13]),位值:FIN=0x01 SYN=0x02 RST=0x04 PSH=0x08 ACK=0x10 URG=0x20。

易错点

  • != 0 是"包含该位",= 值 是"恰好等于";抓纯 SYN 要用等于,否则 SYN-ACK 也会混进来
  • 带选项的 TCP 头长度不固定,但 tcp[tcpflags] 由解析器按实际头长定位,直接使用即可

数据来源与参考

  • man 8 pcap-filter(tcp[tcpflags] 示例)
  • RFC 793(TCP 头部)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌