首页/网络/抓包与流量分析速查/tcpdump src 与 dst 限定方向

tcpdump src 与 dst 限定方向

在 host/net/port 前加 src 或 dst 限定方向:src host 10.0.0.9 只看它发出的包,dst port 3306 只看发往该端口的包;组合后可精确描绘单向会话。

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 BA 发往 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 分别核对,能快速确认哪一侧被拦

易错点

  • 把方向限定当成对整条表达式生效,实际它只修饰紧跟的原语,条件范围会超出预期
  • 在网关抓包却不区分进出方向,把响应误读为请求,结论完全相反
  • 统计请求数时未加方向限定,结果偏大且难以解释
  • 跨抓包点比较时忽略方向视角差异,两侧报文看似对不上其实只是位置不同
  • 漏写 dst 与 src 造成条件过宽,高流量口上会拖慢抓包效率

数据来源与参考

  • man 8 pcap-filter(方向限定符)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌