tcpdump -XX 以十六进制和 ASCII 双栏形式实时显示完整数据包(含链路层头部),配合 -s 0 防截断、-n 禁解析,是调试二进制通信最直接的方式。

直接用 tcpdump 加 -XX 选项就能在终端实时看到十六进制+ASCII混合格式的抓包内容,无需额外工具或保存文件。
用 tcpdump -XX 实时查看原始数据
这是最常用、最直接的方式。-XX 表示以十六进制和 ASCII 双栏形式显示完整数据包(含链路层头),适合快速检查协议字段、载荷内容或调试二进制通信。
- 基础命令:`sudo tcpdump -i eth0 -XX port 80` (监听 eth0 上端口 80 的流量,实时显示十六进制+ASCII)
-
避免截断:加
-s 0确保捕获完整包,防止默认 68 字节截断导致关键字段丢失:
`sudo tcpdump -i any -s 0 -XX icmp` -
精简输出:加
-n不解析 IP/端口名,提升可读性与性能:
`sudo tcpdump -i lo -n -s 0 -XX 'tcp and port 6379'`(本地 Redis 流量)
想带时间戳或过滤特定字符串?用 ngrep 更灵活
如果不仅要十六进制视图,还希望按文本内容(如 HTTP 路径、JSON 字段)实时匹配,ngrep 是更优选择。它支持正则 + 十六进制显示,且输出更聚焦。
- 基本用法:`sudo ngrep -d eth0 -x 'GET /api' port 80` (-x 启用十六进制显示,-d 指定网卡,自动匹配并高亮 GET /api)
-
增强可读性:加
-t显示时间戳,-W byline让每行数据独立换行:
`sudo ngrep -d any -t -W byline -x 'User-Agent' port 80` - 忽略大小写+只看匹配包:`sudo ngrep -i -q -x 'error' tcp port 3306`
需要离线分析或导出纯十六进制?配合 xxd 或 hexdump
若已用 tcpdump -w file.pcap 保存了 pcap 文件,不能直接用 xxd/hexdump 查看——它们读的是二进制文件,不是原始网络帧。需先提取载荷:
- 先用 tcpdump 提取 TCP 数据部分为原始字节流:
`tcpdump -r capture.pcap -A -s 0 'tcp port 80' | grep -v "^$" > payload.txt`(粗略提取 ASCII 部分) - 更可靠的做法是用 tshark 提取原始载荷:
`tshark -r capture.pcap -T fields -e data.text -Y "http" | xxd -r -p | xxd -C`(需安装 tshark) - 若只是查看某个小文件或内存 dump 的十六进制,xxd -C 比 hexdump -C 更简洁直观,推荐优先使用。


















