src 与 dst 在做什么
src 与 dst 是方向限定符,作用于紧跟其后的原语:src host 10.0.0.9 只看这台主机发出的报文,dst port 3306 只看发往该端口的报文。方向是相对抓包点而言的,不是全局事实——在网关两侧抓同一条会话,出向与入向的源目的恰好相反。实用的判断方法很简单:确认请求有没有发出用 src,确认响应有没有回来用 dst,一正一反就能把问题夹在哪一段。
基本信息
| 源方向 | src host / src net / src port |
|---|---|
| 目的方向 | dst host / dst net / dst port |
| 默认行为 | 不加方向限定即双向匹配 |
| 作用范围 | 只修饰紧跟其后的那个原语 |
| 视角 | 相对抓包点的方向,跨点比较前先确认位置 |
典型使用场景
- 只看客户端发出的请求:src host 加 dst port 组合
- 确认服务端是否返回:src port 443 看响应方向
- 缩小统计口径:统计请求量时只算目的端口,避免被回包放大
- 定位单侧丢弃:两端抓包分别用方向条件核对请求与响应
- 排除本地发出的噪音:dst host 之外再用 not src
常用示例
常用示例
tcpdump -i eth0 -nn 'src host 10.0.0.9 and dst port 443' # 该客户端发出的请求
tcpdump -i eth0 -nn 'src port 443 and dst host 10.0.0.9' # 服务端返回的响应
tcpdump -i eth0 -nn 'dst net 203.0.113.0/24' # 发往某个网段
tcpdump -i eth0 -nn 'src port 53' # 只看出自 53 端口的响应
tcpdump -i eth0 -nn 'src host 10.0.0.9 and not dst port 22' # 排除管理流量
tcpdump -nn -r a.pcap 'dst port 3306' | wc -l # 离线统计请求条数方向写法与含义
| 写法 | 匹配的报文 | 用途 |
|---|---|---|
| src host A | 源地址为 A | 确认某台机器是否发出了流量 |
| dst host A | 目的地址为 A | 确认谁在访问这台机器 |
| dst port 443 | 目的端口为 443 | 统计客户端发起的请求 |
| src port 443 | 源端口为 443 | 确认服务端是否返回了响应 |
| src net 与 dst net | 按网段限定方向 | 定位跨网段单向不通的问题 |
| src host A and dst port B | A 发往 B 端口 | 最常用的单向组合写法 |
方向限定只作用于紧邻的原语。写 src host A and port 443 时,src 只修饰 host,端口条件仍是双向的;要限定方向必须写成 src host A and dst port 443 或 src port 443。
在网关上抓包时,同一会话的两个方向都会出现,源与目的会随进出方向互换。不看抓包点就把方向当成全局事实,很容易把请求与响应看反。
两端对照的做法
两端对照的做法
# 客户端侧:请求是否发出
tcpdump -i eth0 -nn 'src host 10.0.0.9 and dst port 3306' -c 10
# 服务端侧:请求是否到达,响应是否发出
tcpdump -i eth0 -nn 'dst port 3306 and src host 10.0.0.9' -c 10
tcpdump -i eth0 -nn 'src port 3306 and dst host 10.0.0.9' -c 10判读要点
- 只有请求方向有报文而响应方向为空,问题在服务端或回程路径
- 两个方向都有报文但客户端仍报超时,需要核对序列号与重传,看是否是丢包重传
- 统计请求量时必须用目的端口,否则会把响应一起算进去
- 跨网段单向不通时用 src net 与 dst net 分别核对,能快速确认哪一侧被拦