You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何完整读取.pcap文件?tcpdump捕获数据包为何缺失字符

解决tcpdump输出中缺失字符的问题

先看你捕获的数据包内容:

reading from file /tmp/prueba.pcap, link-type LINUX_SLL (Linux cooked v1)
13:35:51.767194 IP6 fdc1:41d:9c3:dbef:a6e9:69f0:59aa:b70a.47193 > fdc1:41d:9c3:dbef:0:ff:fe00:8c00.47193: UDP, length 63
        0x0000:  6000 0000 0047 1140 fdc1 041d 09c3 dbef  `....G.@........
        0x0010:  a6e9 69f0 59aa b70a fdc1 041d 09c3 dbef  ..i.Y...........
        0x0020:  0000 00ff fe00 8c00 b859 b859 0047 d42e  .........Y.Y.G..
        0x0030:  3f0c 0000 0dc2 50f1 0d7b 2254 696d 6522  ?.....P..{"Time"
        0x0040:  3a5b 3136 3632 3033 3933 3531 2c22 225d  :[1662039351,""]
        0x0050:  2c22 4d6f 6417 0012 320f 00f0 0352 6f6c  ,"Mod...2....Rol
        0x0060:  6c22 3a5b 3533 302c 2264 c2ba 225d 7d    l":[530,"d.."]}

问题根源是tcpdump的ASCII预览会把非可打印ASCII字符替换成.,这类字符的存在容易让你误以为后续内容缺失。你看到的"Mod"后的0x17是不可打印的控制字符(ETX),被替换成.,但这不代表"e"不存在——或是你的应用层协议中"Mode"的"e"被编码成了非ASCII字节,只是tcpdump没正确显示。

要完整读取消息并编写自动化提取程序,可用以下几种方法:

方法1:用tshark直接提取应用层数据

tshark是Wireshark的命令行工具,能精准提取原始数据:

# 输出UDP负载的十六进制字符串
tshark -r /tmp/prueba.pcap -T fields -e data.data
# 直接转成可读字符串(忽略非可打印字符)
tshark -r /tmp/prueba.pcap -T fields -e data.data | xxd -r -p

方法2:用Python的Scapy库解析

适合编写自动化程序,直接读取pcap并提取UDP负载:

from scapy.all import rdpcap, UDP, IPv6

packets = rdpcap('/tmp/prueba.pcap')
for pkt in packets:
    if pkt.haslayer(UDP):
        payload = pkt[UDP].payload.load
        # 打印原始字节
        print(payload)
        # 转成字符串(忽略非可打印字符)
        print(payload.decode('ascii', errors='ignore'))
        # 按十六进制查看
        print(payload.hex())

通过Scapy可直接访问原始负载字节,不受tcpdump显示限制,方便提取数值。

方法3:调整tcpdump显示参数

如果坚持用tcpdump,可用-xx打印完整十六进制数据,自行对照解析:

tcpdump -r /tmp/prueba.pcap -xx

从你提供的十六进制数据看,0x0050行的4d6f64是"Mod",后续的0x17并非"e"(对应0x65),若确认应用层应为"Mode",需检查发送端编码逻辑——但既然你排除了传输问题,用上述方法提取原始数据后,就能基于实际字节编写自动化提取逻辑。

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:21:27