Linux中tcpdump抓包怎么过滤特定标志位报文

梦雪吖_7745

梦雪吖_7745

2026-09-19

896人浏览

原创

tcpdump 可通过 bpf 表达式精准过滤 tcp 标志位,如 syn、ack、fin、rst 等,利用 tcp[tcpflags] 自动定位标志字节,结合按位与(&)操作匹配置位状态,支持组合条件与端口/方向限制,高效诊断连接建立、中断及异常行为。

linux中tcpdump抓包怎么过滤特定标志位报文

tcpdump 可以直接通过 BPF 表达式过滤 TCP 标志位,比如 SYN、ACK、FIN、RST 等,这是诊断连接建立、异常中断或扫描行为的关键手段。它不依赖应用层解析,纯靠 TCP 头部的 12 字节控制字段(含 6 个标志位)做匹配,准确且高效。

用 tcp[13] 提取 TCP 标志字节

TCP 头部中,第 13 个字节(索引从 0 开始,即 tcp[13])存放 6 个标志位:URG、ACK、PSH、RST、SYN、FIN(从高位到低位,bit7–bit2)。每个标志对应一个比特值:

  • SYN → 0x02(二进制 00000010)
  • ACK → 0x10(二进制 00010000)
  • FIN → 0x01(二进制 00000001)
  • RST → 0x04(二进制 00000100)
  • PSH → 0x08(二进制 00001000)
  • URG → 0x20(二进制 00100000)

注意:tcp[13] 是原始字节值,不是布尔真假;要判断某标志是否置位,必须用按位与(&)操作。

常见标志位过滤写法

以下写法均需加单引号包裹整个表达式,防止 shell 解析特殊字符:

Linux Journey
Linux Journey

当用户想学习Linux基础、命令行、文件系统等时,在LabEx查找并推荐免费的Linux Journey课程。

下载
  • 只抓 SYN 包(三次握手第一步):tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] == tcp-syn'
  • 抓所有含 ACK 的包(含数据确认和纯 ACK):tcpdump -i eth0 'tcp[tcpflags] & tcp-ack != 0'
  • 抓 FIN+ACK 组合(正常断开):tcpdump -i eth0 'tcp[tcpflags] & (tcp-fin|tcp-ack) == (tcp-fin|tcp-ack)'
  • 抓 RST 包(异常重置):tcpdump -i eth0 'tcp[tcpflags] & tcp-rst != 0'
  • 排除 SYN 和 RST(只看数据传输阶段):tcpdump -i eth0 'tcp and not (tcp[tcpflags] & (tcp-syn|tcp-rst) != 0)'

说明:tcp-syn 等是 tcpdump 内置符号常量,比硬写 0x02 更安全可读;== 表示**完全匹配该组合**,!= 0 表示**只要该位被置位就命中**。

为什么不能直接写 tcp[13] == 0x02?

因为 TCP 头部长度可变(含选项),标志位所在偏移不一定总在字节 13。虽然大多数情况是,但若存在 TCP 选项(如时间戳、SACK),头部会变长,tcp[13] 可能指向错误位置。而 tcp[tcpflags] 是 tcpdump 封装好的逻辑偏移计算,自动跳过选项区定位到正确的标志字节,更健壮。

结合端口和方向提升准确性

单独过滤标志位容易混入无关流量。建议叠加协议、端口或方向限制:

  • 只看目标端口 3306 的 SYN 连接请求:tcpdump -i eth0 'dst port 3306 and tcp[tcpflags] & tcp-syn != 0'
  • 监控某 IP 发起的 RST 异常:tcpdump -i eth0 'src host 10.0.1.5 and tcp[tcpflags] & tcp-rst != 0'
  • 抓本机对外发出的 FIN 包(主动关闭):tcpdump -i eth0 'src host 192.168.1.100 and tcp[tcpflags] & tcp-fin != 0'

务必加上 -n(禁 DNS 解析)和 -nn(禁端口名转换),避免干扰输出和性能延迟。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux linux教程 linux入门

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

3885

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

355

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3570

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3113

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2153

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5090

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4782

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2873

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2385

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习