首页/网络/抓包与流量分析速查/tcpdump -A 按 ASCII 打印载荷

tcpdump -A 按 ASCII 打印载荷

把报文载荷以 ASCII 形式打印,适合直接肉眼读 HTTP、SMTP、Redis 等文本协议内容,快速确认请求与响应。

-A 在做什么

-A 把报文的载荷以 ASCII 形式打印出来,适合直接肉眼阅读文本协议:HTTP 请求头、响应体、邮件交互、Redis 命令都能看得清清楚楚。它只改变显示方式,不影响落盘内容,因此可以与其他选项自由组合。对二进制协议使用它会得到大片乱码,此时应改用十六进制视图。写 -A 时通常还要搭配完整快照长度,否则内容会被截断。

基本信息

作用以 ASCII 打印报文内容,含头部
适用协议明文文本协议,如 HTTP、邮件、部分缓存协议
不适用加密流量与二进制协议,会显示为乱码
搭配建议配合完整快照长度,避免内容被截断
与落盘关系仅影响显示,文件内容不变

典型使用场景

  • 快速确认接口返回内容:直接读响应头与响应体
  • 核对请求携带的字段:确认请求头与参数是否如预期
  • 排查字符编码问题:看到实际字节即可判断编码是否一致
  • 验证业务流量是否明文:确认是否存在未加密的敏感传输
  • 配合离线读取:对已落盘文件用文本视图复核内容

常用示例

常用示例
tcpdump -i eth0 -nn -A -s 0 'tcp port 80 and host 10.0.0.9' | head -60   # 看明文 HTTP
tcpdump -i eth0 -nn -A -s 0 -c 5 'tcp port 8080'                        # 取样查看内容
tcpdump -nn -A -r http.pcap 'tcp port 8080' | head -40                  # 离线读取明文
tcpdump -i eth0 -nn -A -s 0 'tcp port 80 and tcp[13] & 8 != 0' | head -40   # 只看带推送标志的数据包
tcpdump -i eth0 -nn -X -s 0 'tcp port 80' | head -40                    # 二进制视角,对照排查乱码

打印选项对照

选项显示内容适用场景
-A载荷按 ASCII 显示文本协议肉眼阅读
-X十六进制加 ASCII 并排二进制协议与乱码排查
-e附加链路层头部核对 MAC 与以太网类型
-v 与更高级别提升解码详细度看 IP 与 TCP 选项字段
组合使用例如 -A 与 -X 同时给出同一报文两种视角对照
输出里会混入大量二进制控制字符与空行,用行数上限或管道截取前几十行更易读。内容分片时同一请求可能跨多个报文显示。
抓取明文内容可能涉及账号、令牌等敏感信息。取证与共享抓包文件前要先确认合规要求,必要时做脱敏处理再交付。

与过滤条件配合

与过滤条件配合
tcpdump -i eth0 -nn -A -s 0 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' | head -40   # 只看 GET 请求内容
tcpdump -i eth0 -nn -A -s 0 'dst port 80 and host 10.0.0.9' | grep -i -E 'host:|user-agent:' | head -10   # 直接抽关键头部

判读要点

  • 输出全是乱码时说明这是加密或二进制流量,换十六进制视图再看
  • 看到内容明显不全时先核对快照长度设置,而不是怀疑对端少发
  • 响应体较长时分片显示,需要按会话重组才能看到完整内容
  • 抓包文件里同时包含请求与响应时,用方向条件区分更清晰

易错点

  • 对加密流量使用文本视图得到乱码,误以为抓到了错误的数据
  • 快照长度不足导致内容被截断,看到的是不完整的报文
  • 把明文内容直接贴进工单,可能泄露账号与令牌等敏感信息
  • 把分片显示的多个报文当成多个独立请求,重复统计
  • 误以为加了这个选项会影响落盘内容,实际它只影响终端显示

数据来源与参考

  • man 8 tcpdump(-A 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌