(PCAP)無法從一些數據包的解壓縮ZLIB/DEFLATE我試圖從從網絡捕獲的文件壓縮字節的數據數據
數據沒有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);
}
}
我的System.IO.Compression.DeflateStream
,Ionic.Zlib.DeflateStream
(從DotNetZip)C#以及Java的java.util.zip.Inflater
測試。所有給出了類似的陣列充滿0 ..
任何想法在這裏可能會失蹤? ZLIB/DEFLATE可能是有狀態的,並且解壓縮需要來自所有先前數據包的數據?
謝謝。
感謝您的支持。現在,我的同事似乎能夠使用Java從它提取數據,但它需要閱讀前面提到的所有數據包。 – Gant 2011-06-04 08:11:03