C# 无法解压缩ZLIB/解压缩数据

C# 无法解压缩ZLIB/解压缩数据,c#,compression,zlib,deflate,dotnetzip,C#,Compression,Zlib,Deflate,Dotnetzip,我正试图从网络捕获文件(PCAP)的压缩字节中提取数据 来自其中一些数据包的数据没有ZLIB头(前2个字节,其中第一个字节的低位4位始终为8),因此当我尝试使用ZlibStream对其进行解压缩时出现异常。带有标题的数据似乎工作正常 据我所知,ZLIB只是DEFLATE上的一个页眉和页脚,我将这些没有页眉的数据传递给DeflateStream。这次DeflateStream没有抛出任何错误,它只是给出了错误的数据(但给出了正确的长度) 这是一个示例数据。C代码示例使用DotNetZip: byt

我正试图从网络捕获文件(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
(from)和Java的
Java.util.zip.Inflater
进行了测试。都给出了一个类似的数组,数组中充满了0

你知道这里可能缺少什么吗?ZLIB/DEFLATE是否可能是有状态的,并且解压需要来自所有先前数据包的数据

谢谢。

是的,您需要整个“文件”,您不能单独对单个数据包放气


从zlib文档中,可以从文件中的各个点开始deflate。但是,您需要完全控制拼图的压缩部分,因为您必须准确地知道这些点的位置,以便从那里开始放气。而且他们仍然(可能)不会打破“包”的界限。

谢谢。现在,我的同事似乎能够使用Java从中提取数据,但它需要读取前面提到的所有数据包。