2017-05-11 13 views
0

私はパケットリスニングについてのプロジェクトに取り組んでいます。私はgzip圧縮解除に問題があります。TCP HTTP Gzip文字列圧縮解除C#

private static string gzipDecompress(TcpDatagram tcp) 
    { 
     if (tcp.Http.Header != null) 
     { 
      MemoryStream ms = tcp.Http.ToMemoryStream();     
      byte[] bytearray = new byte[tcp.Http.Length];     
      ms.Read(bytearray, 0, 4); 
      if (BitConverter.ToUInt16(bytearray, 0) == 0x8b1f) 
      { 
       ms.Seek(0, SeekOrigin.Begin); 
       GZipStream zip = new GZipStream(ms, CompressionMode.Decompress); 
       zip.Read(bytearray, 0, bytearray.Length); 
       StringBuilder sB = new StringBuilder(bytearray.Length); 
       for (int r = 0; r < bytearray.Length; r++) 
        sB.Append((Char)bytearray[r]); 
       zip.Close(); ms.Close(); zip.Dispose(); ms.Dispose(); 
       return sB.ToString(); 
      } 
      else 
       return ""; 
     } 
     else 
      return ""; 
    } 

それは私がそれを修正するか、私はそれを行うには間違った方法で午前ことができますどのようにマジックナンバー例外を与える:コードはありますか?

答えて

0

HTTP応答で最初のHTTPパケットを解析する場合は、HttpDatagram.Bodyを使用してそのパケットのHTTP本体を取得する必要があります。

他のパケットを解析しようとしている場合は、まずHTTP本体の解析を試みる前にTCP再構築を行う必要があります。