示例#1
0
        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);
        }
示例#2
0
        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);
        }