Я пытаюсь извлечь данные из сжатых байтов из файла захвата сети (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
. Все дали похожий массив, полный 0s ..
Есть идеи о том, что здесь может отсутствовать? Возможно ли, что ZLIB / DEFLATE находится в состоянии и для декомпрессии требуются данные из всех предыдущих пакетов?
Спасибо.