如何将Wireshark捕获的图片十六进制数据包还原为JPG图片?
当然可以把Wireshark捕获的十六进制数据还原成图片!
我刚好做过类似的操作,给你分步骤讲清楚怎么实现:
第一步:从Wireshark提取目标数据
首先你需要把捕获到的图片十六进制数据从Wireshark里导出来,操作很简单:
- 在Wireshark的数据包列表里,找到你发送图片数据的那个TCP会话里的任意一个数据包,右键点击它,选择「Follow」→「TCP Stream」。
- 在弹出的窗口中,先确认数据方向(比如你是客户端发往服务器,就选对应的方向),然后把显示格式切换为「Raw」——这样就能看到你实际发送的原始字节内容了。
- 你可以直接把窗口里的内容复制下来,或者点击「Save As」按钮,把它保存成一个文本文件(比如命名为
captured_hex_data.txt)。
第二步:用Python将捕获数据还原为图片
因为你是把图片二进制转成十六进制字符串(ASCII形式)发送的,所以Wireshark捕获到的其实是这些十六进制字符的ASCII字节(比如字符f对应的字节是0x66)。我们需要把这些ASCII字节还原成十六进制字符串,再转回二进制图片数据。
写个简单的Python脚本就能搞定:
import binascii # 读取Wireshark导出的捕获文件 with open('captured_hex_data.txt', 'rb') as input_file: # 读取字节并解码为ASCII字符串,去掉首尾可能的空白 hex_string = input_file.read().decode('ascii').strip() # 将十六进制字符串转回二进制数据 image_binary = binascii.unhexlify(hex_string) # 写入JPG文件 with open('recovered_image.jpg', 'wb') as output_file: output_file.write(image_binary)
注意事项
- 确保你提取的是纯图片的十六进制数据:如果你的Socket会话里还发送了其他无关数据(比如握手信息、额外的指令),那在Follow TCP Stream的时候,要手动选中并复制图片对应的那部分数据,避免把无关内容混进去。
- TCP分段不用怕:Wireshark的「Follow TCP Stream」会自动把同一个会话里的分段数据拼接完整,不用你手动合并。
- 检查数据完整性:如果还原后的图片打不开,大概率是捕获的数据不完整——可以去Wireshark里确认有没有数据包丢失,或者调整捕获缓冲区大小重新抓包。
内容的提问来源于stack exchange,提问作者Vyshnavi
相关产品推荐
相关产品推荐

