首页/网络/抓包与流量分析速查/tcpdump -n 与 -nn 不做解析

tcpdump -n 与 -nn 不做解析

关闭名称解析:-n 不解析主机名,-nn 同时不解析协议与端口号。排障与统计时用 -nn 输出稳定、速度快,也避免 DNS 反向解析产生额外流量。

-n 与 -nn 在做什么

默认情况下 tcpdump 会把地址翻译成主机名、把端口号翻译成服务名,这需要查 DNS 与本地服务表。抓包机如果没有可用的内网 DNS,反查会先超时才输出,输出速度跟不上收包速度就直接丢包;而且同一份报文在不同解析环境下打印出来的内容不一致。-n 关闭主机名解析,-nn 连端口名也不解析,输出 443 而不是 https。排障与统计一律建议加 -nn,这是服务器侧抓包的默认习惯。

基本信息

-n不解析主机名与域名
-nn不解析主机名,也不解析端口名与服务名
影响范围只影响显示输出,不影响抓包内容与落盘文件
离线同样生效tcpdump -nn -r file.pcap 也能稳定输出数字形式
对照项Wireshark 有独立的名称解析开关,默认关闭

典型使用场景

  • 服务器现场抓包:默认加 -nn,避免反查带来的停顿与丢包
  • 与业务日志比对:日志里记录的是数字地址与端口,输出保持同一种形式才好对齐
  • 离线批量分析:tshark 处理大文件时开启解析会成倍放大耗时
  • 内网无 DNS 环境:不加 -n 时输出会夹杂解析失败留下的怪异后缀
  • 需要知道对端是谁:先解析出地址,再用 ip.addr 或 host 精确过滤

对比示例

对比示例
tcpdump -i eth0 -c 3             # 可能显示 client.example.com.https
tcpdump -i eth0 -nn -c 3         # 稳定显示 10.0.0.5.52344 > 10.0.0.9.443
tcpdump -nn -r a.pcap -c 5       # 离线读取同样不解析
tcpdump -i eth0 -nn -ttt port 443   # 数字地址加相对时间,排查时延常用
tcpdump -i eth0 -nn -c 5 host 10.0.0.9    # 过滤里用数字地址,避免触发解析

解析行为对照

用法显示形式代价
默认10.0.0.5.https 这类形式每次都要查主机名与端口名,无 DNS 时会卡顿
-n10.0.0.5.443 或仍带服务名不查主机名,端口名是否解析随版本而异
-nn10.0.0.5.443完全不解析,输出稳定且速度快
-nn -r 文件同上离线分析结果最稳定,便于多人核对
-nn -ttt数字地址加相对时间戳排查重传与时延间隔的常用组合
名称解析只影响显示,不影响抓包与落盘内容。同一个 pcap 文件加不加 -nn 读出来的是同一批报文,所以贴结论时优先贴数字形式。
在 DNS 服务器上抓包时更要加 -nn:反向解析本身会产生额外查询流量,污染现场数据,让排查结论失真。

按需解析

按需解析
getent hosts 10.0.0.9            # 想看某地址对应哪台机器,单独解析
dig -x 10.0.0.9 +short           # 用 dig 反查,比让 tcpdump 自己解析可控
grep -E '10\.0\.0\.9[[:space:]]' /etc/hosts   # 内网静态映射查一下

使用建议

  • 抓包命令模板里把 -nn 写进固定参数,避免每次靠人记得加
  • 与 -s 0 同时使用:一个解决内容完整,一个解决输出速度
  • 需要给人看的报告里保留数字地址,再附一张地址与主机的对照表
  • 批量脚本里不要依赖主机名,数字输出在跨环境复现时不会产生歧义

常见误区

  • 以为 -nn 会改变抓到的内容:它只改显示,同一份文件两种读法数据一致
  • 以为加了 -n 就万事大吉:不同版本的端口名解析行为有差异,统一用 -nn 才不会误判输出格式
  • 用主机名做过滤条件:解析结果随环境变化,过滤条件应该用数字地址
  • 在无 DNS 的机器上不加密析选项,导致输出断续且抓包丢包,误判成网络本身在丢包

易错点

  • 内网没有反向解析记录时 tcpdump 会等 DNS 超时才输出,高流量下直接造成丢包,因为抓包缓冲区被写满
  • 带主机名的输出在不同解析环境下结果不同,贴到工单里别人无法复现同样的视图
  • -nn 只影响显示不影响过滤:表达式里写域名仍然会触发解析,过滤条件一律用数字
  • 反向解析产生的额外查询流量会干扰 DNS 排查现场,抓 DNS 时务必加 -nn
  • 只加一个 -n 时端口名是否解析随版本而异,想要确定的行为统一写 -nn

数据来源与参考

  • man 8 tcpdump(-n/-nn 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌