tcpdump抓dns流量仅捕获原始二进制数据,不解析域名等字段;区分查询(qr=0、源端口随机、目的端口53)与响应(qr=1、源端口53、事务id匹配),需用-v参数查看标志位和计数,导出pcap文件后用wireshark深度解析。

直接用 tcpdump 抓到的 DNS 流量是原始二进制数据,它本身不解析 DNS 报文字段(比如域名、查询类型、响应码),但能准确捕获请求与响应的网络行为。分析 DNS 查询响应报文,关键在抓对包 + 看清方向 + 结合参数输出判断。
看懂抓包输出里的 DNS 请求和响应
DNS 查询和响应都走 53 端口,区分靠方向和标志位:
-
查询(Query):源端口随机(如 54321)、目的端口 53;输出中显示
QR=0(Query Response 标志为 0),常见于tcpdump -v输出的 DNS 行末尾 -
响应(Response):源端口 53、目的端口是客户端随机端口;
QR=1,且通常带rd=1(递归期望)、ra=1(递归可用),以及qdcount=1(问题数)、ancount=N(回答数) - 例如这一行:
11:22:33.445678 IP 192.168.1.10.54321 > 192.168.1.1.53: 57864+ A? google.com. (28)→ 这是查询(+表示 RD=1,A?是查询类型) - 下一行:
11:22:33.446789 IP 192.168.1.1.53 > 192.168.1.10.54321: 57864 1/0/0 A 172.217.164.110 (44)→ 这是响应(事务 ID 相同为 57864,1/0/0表示 ancount=1, nscount=0, arcount=0)
用 -v 或 -vv 查看 DNS 标志和计数字段
默认输出只显示基础五元组,加 -v 才能看到 DNS 层关键信息:
-
tcpdump -i eth0 -n -v port 53:显示 QR、OPCODE、RD、RA、RCODE、qdcount、ancount 等 - 关注
QR=0(查) vsQR=1(应),RCODE=0表示无错误,RCODE=3是 NXDOMAIN(域名不存在) - 若看到
ancount=0但nscount>0,可能是被重定向到权威服务器;ancount>0且含 A/AAAA 记录,说明解析成功
保存为 pcap 文件,用 Wireshark 深度解析
tcpdump 不做应用层语义解析,真正要看域名、TTL、记录类型、DNSSEC 标志等,必须导出后用 Wireshark:
- 先保存:
tcpdump -i eth0 -nn -w dns.pcap port 53 - 传输到本地,用 Wireshark 打开 → 右键某条 DNS 包 → “Follow” → “UDP Stream”,或直接展开 DNS 协议树
- Wireshark 能清晰标出:Question、Answer、Authority、Additional 四个区域,每条记录的 Name、Type、Class、TTL、Data
快速定位异常响应的小技巧
排查 DNS 故障时,可结合过滤和输出聚焦关键线索:
- 只看响应且失败的:
tcpdump -i eth0 -n -v 'udp port 53 and (ip[36] & 0x80) and ip[38] == 3'(粗略匹配 QR=1 且 RCODE=3,需熟悉 IP/UDP 偏移,生产环境更推荐先抓全再用 Wireshark 过滤) - 检查是否超时无响应:用
-c 20抓固定数量,观察有无成对出现的 Query/Response - 确认是否走 TCP:若看到
tcp port 53且长度较大(>512 字节),可能是 DNSSEC 或大响应,需加tcp条件避免遗漏











