我正在尝试从网络捕获文件(PCAP)的压缩字节中提取数据。
其中一些数据包中的数据没有 ZLIB 标头(前 2 个字节,其中第一个字节的低 4 位始终为 8),因此当我尝试使用ZlibStream
. 带有标题的数据似乎工作正常。
据我了解,ZLIB 只是 DEFLATE 上的页眉和页脚,我将这些不带页眉的数据传递给DeflateStream
. 这次DeflateStream
没有抛出任何错误,它只是给出了错误的数据(但它给出了正确的长度)......
这是一个样本数据。C# 代码示例使用 DotNetZip:
byte[] test3 = new byte[] { 0x1a, 0x6d, 0xf, 0x8d, 0xb6, 0x87, 0x46, 0xdb, 0x43, 0xa3, 0xed, 0xa1, 0xd1,
0xf6, 0xd0, 0x68, 0x7b, 0x68, 0xb4, 0x3d, 0x34, 0xda, 0x1e, 0xb2, 0x44, 0x3a, 0x39, 0x6f, 0x24,
0xae, 0x1f, 0x2, 0x0, 0x0, 0x0, 0xff, 0xff };
static void UncompressData(byte[] data)
{
if ((data[0] & 0x0F) != 0x08)
{
var uncompressed = DeflateStream.UncompressBuffer(data);
Console.WriteLine("Uncompressed Deflate data : {0} => {1} bytes", data.Length, uncompressed.Length);
}
else
{
var uncompressed = ZlibStream.UncompressBuffer(data);
Console.WriteLine("Uncompressed ZLIB data : {0} => {1} bytes", data.Length, uncompressed.Length);
}
}
我用 C# System.IO.Compression.DeflateStream
、Ionic.Zlib.DeflateStream
(来自DotNetZip)和 Java 的java.util.zip.Inflater
. 所有人都给出了类似的充满0的数组..
关于这里可能缺少什么的任何想法?ZLIB/DEFLATE 是否有可能是有状态的,并且所有先前数据包的解压缩所需的数据?
谢谢你。