端口层过滤
抓包时把范围收窄到端口是最常用的一步:写端口号会同时匹配源端口与目的端口,加上方向限定词就只匹配一侧,用范围限定词还能一次覆盖一段端口。多条件之间用逻辑词连接时必须整体加引号,否则会被命令解释器当成控制符号处理。掌握这几种写法,就能把海量报文缩小到与某个业务相关的那几条连接上。
基本信息
| 匹配范围 | 默认同时匹配源与目的端口,因此一次抓到双向报文 |
|---|---|
| 方向限定 | 加源或目的的限定词可只看一侧,判断方向时非常重要 |
| 范围写法 | 范围限定词接受起止值,等价于两个条件用逻辑或连接 |
| 协议限定 | 端口条件同时覆盖两种传输层协议,只要其一就显式写明协议 |
| 语法提示 | 多条件表达式务必用引号包裹,语法错误会被直接报出而不会静默少抓 |
典型使用场景
- 验证端口可达:只看目标端口,确认请求有没有到达、有没有被回绝
- 排查解析相关流量:限定解析端口并区分传输协议
- 数据库连接排错:只看数据库端口,观察连接建立与断开
- 多端口业务巡检:用范围条件覆盖一组相邻端口
- 降低噪声:把无关端口排除后,关键报文更容易被发现
端口过滤写法
端口过滤写法
tcpdump -nn -i eth0 port 53 # 同时匹配源与目的端口 53
tcpdump -nn -i eth0 udp port 53 # 明确只抓 UDP 的解析流量
tcpdump -nn -i eth0 src port 80 and dst port 1024-65535 # 服务端发出的响应
tcpdump -nn -i eth0 portrange 8000-9000 # 一段端口范围
tcpdump -nn -i eth0 'port 80 or port 443' # 多端口必须整体加引号
tcpdump -nn -i eth0 'not port 22 and not port 123' # 排除噪声:管理端口与时间同步
tcpdump -nn -i eth0 'tcp dst port 3306' # 只看发往数据库端口的 TCP 报文限定词速查
| 写法 | 含义 | 使用建议 |
|---|---|---|
| 端口号 | 该端口的双向报文 | 最基础的写法,先抓双向再分方向 |
| 源端口限定 | 只看从该端口发出的报文 | 判断服务端响应是否发出 |
| 目的端口限定 | 只看发往该端口的报文 | 判断请求是否到达 |
| 范围限定 | 覆盖一段连续端口 | 批量端口场景更简洁 |
| 协议前缀 | 只匹配某种传输层协议 | 同名端口的两种协议容易混淆时必加 |
| 排除写法 | 把指定条件排除在外 | 清理管理流量与监控噪声 |
同一个端口号在两种传输层协议上都可能有流量,只写端口号会同时抓到两类报文,排查时容易被误导,需要区分时显式写明协议前缀。
过滤器语法错误会立刻被报出,不会静默地只抓一部分,所以可以放心先跑一次验证表达式是否正确。
检查一个完整交互时,最简单的做法是先只写端口号抓双向,再在回读阶段叠加方向条件;抓的时候少写条件,分析的时候多写条件。
混用源与目的端口的条件时注意方向:加错方向会抓到完全相反的报文,产生没有响应的错误结论。