protected string TryDeflateDecoded(string data) { var compressedBuffer = HttpEncoding.GetBytes(data); // Expected (gzip/deflate magic bytes) // 0x1F, 0x8B, 0x08 // 31, 139, 8 // UTF8: Got // 0x1F, 0xEF, 0xBF, 0xBD, 0x08, 0x00.., 0x04 // 31, 239, 191, 189, 8, (5 times) 0, 4, 0 // ASCII: Got // 0x1F, 0x3F, 0x08, 0x00.., 0x04 // 31, 63, 8, (5 times) 0, 4, 0 // Got it, encoding needs to be iso-8859-1 WTF ... // Hacky but works: They strip the GZIP trailer.. so we skip the GZIP header (10 bytes) and just decompress the deflate data try { const int gzipHeaderSize = 10; var deflateBuffer = new byte[compressedBuffer.Length - gzipHeaderSize]; Buffer.BlockCopy(compressedBuffer, gzipHeaderSize, deflateBuffer, 0, deflateBuffer.Length); var decompressedBuffer = Ionic.Zlib.DeflateStream.UncompressBuffer(deflateBuffer); var decompressedData = HttpEncoding.GetString(decompressedBuffer); return(decompressedData); } catch { } return(string.Empty); }
protected void Parse() { var packetData = HttpEncoding.GetString(mRawCapture.Data); var matchRequestData = Regex.Match( packetData, @"HTTP/1\.1 (?<status>[0-9]{3} [^\r\n]+)(?<header>.*Content-Length: [0-9]+)(?<body>.*)$", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture ); RequestHost = ((IPv4Packet)_ethernetPacket.PayloadPacket).SourceAddress.ToString(); var responseStatus = matchRequestData.Groups["status"].Value.Trim(); var responseHeader = matchRequestData.Groups["header"].Value.Trim(); var responseBody = matchRequestData.Groups["body"].Value.Trim(); ParseHeader(responseHeader); ParseBody(responseBody); }