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

使用Scapy嗅探TCP流量时末尾奇怪文本的含义及信息提取咨询

问题解答

1. 奇怪文本的本质

你遇到的gz字段值是Base64编码后的gzip压缩数据,服务端为了减少传输包体积,把返回的大体积载荷做了gzip压缩后再转Base64编码放在这个字段里,不属于乱码,完全可以提取有效信息。

2. 提取操作逻辑

只需要在现有代码中新增解码逻辑即可,流程如下:

  • 解析JSON后先判断b字段下是否存在gz键
  • 存在的话先对gz值做Base64解码,得到gzip压缩二进制数据
  • 再对二进制数据做gzip解压,得到原始明文后按需解析即可

3. 调整后可用代码

from scapy.all import sniff
import json
import base64
import gzip
from io import BytesIO

while True:
    packet = sniff(count=1, filter='host 91.225.236.166')
    try:
        info = packet[0].load.decode('utf-8')
        info = info.replace('\x00', '')
        info = json.loads(info)
        # 新增gz字段解码逻辑
        if 'b' in info and 'gz' in info['b']:
            # 第一步:Base64解码
            gz_bytes = base64.b64decode(info['b']['gz'])
            # 第二步:gzip解压
            with gzip.GzipFile(fileobj=BytesIO(gz_bytes), mode='rb') as f:
                raw_content = f.read().decode('utf-8')
                # 转JSON拿到原始结构化数据
                decompressed_data = json.loads(raw_content)
                # 把解压后的数据替换回去方便后续处理
                info['b']['raw_data'] = decompressed_data
                del info['b']['gz']
        print(info)
    except:
        continue

4. 注意事项

  • 若遇到解压失败的情况,可以先检查Base64解码后的二进制数据头是否为gzip标准魔术头1f 8b,确认数据包完整性后再处理
  • 如果解压后的内容不是JSON格式,可根据你自身的业务场景调整解压后的解析逻辑

内容的提问来源于stack exchange,提问作者Левый Тип

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:57:03