internal List <string> CompareHeaders(string leftstring, string rightstring)
        {
            HTTPRequestHeaders left  = new HTTPRequestHeaders();
            HTTPRequestHeaders right = new HTTPRequestHeaders();

            foreach (var s in leftstring.Split('\n'))
            {
                if (string.IsNullOrEmpty(s) || s.Split(':').Length < 2)
                {
                    continue;
                }
                left.Add(s.Split(':')[0], s.Split(':')[1]);
            }
            foreach (var s in rightstring.Split('\n'))
            {
                if (string.IsNullOrEmpty(s) || s.Split(':').Length < 2)
                {
                    continue;
                }
                right.Add(s.Split(':')[0], s.Split(':')[1]);
            }

            var leftResult  = string.Empty;
            var rightResult = string.Empty;
            var leftOnly    = string.Empty;

            foreach (var head in left)
            {
                var sameInRight = right.FirstOrDefault(x => x.Name == head.Name);
                if (sameInRight == null)
                {
                    leftOnly += head.Name + ":" + head.Value + Environment.NewLine;
                }
                else
                {
                    if (head.Value != sameInRight.Value)
                    {
                        leftResult  += head.Name + ":" + head.Value + Environment.NewLine;
                        rightResult += sameInRight.Name + ":" + sameInRight.Value + Environment.NewLine;
                    }
                }
            }

            foreach (var head in right)
            {
                rightResult += head.Name + ":" + head.Value + Environment.NewLine;
            }
            return(new List <string> {
                leftResult + Environment.NewLine + leftOnly, rightResult
            });
        }
Beispiel #2
0
        private async void OnNodeSelected(object sender, TreeViewEventArgs e)
        {
            var entity    = e.Node.Tag as MimeEntity;
            var multipart = entity as Multipart;
            var part      = entity as MimePart;

            byte[] body = new byte[] { };

            if (multipart != null)
            {
                body = Encoding.UTF8.GetBytes(multipart.Preamble);
            }

            if (part != null && part.ContentObject != null)
            {
                Stream stream = part.ContentObject.Open();

                if (string.Equals(part.ContentType?.MimeType, "application/gzip", System.StringComparison.OrdinalIgnoreCase))
                {
                    stream = await GZipCompressor.DecompressAsync(stream);
                }

                body = await StreamUtilities.ReadFullyAsync(stream);
            }

            var httpHeaders = new HTTPRequestHeaders();

            if (entity != null)
            {
                foreach (var header in entity.Headers)
                {
                    httpHeaders.Add(header.Field, header.Value);
                }
            }
            _headersRequest.headers = httpHeaders;

            _rawRequest.body = body;
            _xmlRequest.body = body;
        }
Beispiel #3
0
 public static Session[] GetHTTPSHandshakeFromStreams(TCPStream tcpsClient, TCPStream tcpsServer)
 {
     Session[] result;
     try
     {
         if (tcpsClient == null)
         {
             result = new Session[0];
         }
         else
         {
             MemoryStream payloadStream = tcpsClient.GetPayloadStream(null, 1024);
             payloadStream.Position = 0L;
             MemoryStream memoryStream = null;
             if (tcpsServer != null)
             {
                 memoryStream          = tcpsServer.GetPayloadStream(null, 1024);
                 memoryStream.Position = 0L;
             }
             string text  = Utilities.UNSTABLE_DescribeClientHello(payloadStream);
             string text2 = "No server response was found";
             if (memoryStream != null && memoryStream.Length > 0L)
             {
                 text2 = Utilities.UNSTABLE_DescribeServerHello(memoryStream);
             }
             if (string.IsNullOrEmpty(text) && (text2 == null || text2.Length < 48))
             {
                 result = new Session[0];
             }
             else
             {
                 HTTPRequestHeaders hTTPRequestHeaders = new HTTPRequestHeaders();
                 hTTPRequestHeaders.HTTPMethod  = "CONNECT";
                 hTTPRequestHeaders.RequestPath = string.Format("{0}:{1}", tcpsClient.tcpEndpoints.addrDst, tcpsClient.tcpEndpoints.iDstPort);
                 hTTPRequestHeaders.Add("Host", hTTPRequestHeaders.RequestPath);
                 hTTPRequestHeaders.Add("Fiddler-Import", "Packet capture contained HTTPS traffic. Parsing HTTPS Handshake to show this mock Session.");
                 HTTPResponseHeaders hTTPResponseHeaders = new HTTPResponseHeaders();
                 hTTPResponseHeaders.SetStatus(200, "Emulated CONNECT Tunnel");
                 Session session = new Session(hTTPRequestHeaders, Encoding.UTF8.GetBytes(text));
                 session.oResponse.headers               = hTTPResponseHeaders;
                 session.responseBodyBytes               = Encoding.UTF8.GetBytes(text2);
                 session.oFlags["X-EgressPort"]          = (session.oFlags["X-ClientPort"] = tcpsClient.tcpEndpoints.iSrcPort.ToString());
                 session.oFlags["X-ClientIP"]            = tcpsClient.tcpEndpoints.addrSrc.ToString();
                 session.oFlags["X-HostIP"]              = tcpsClient.tcpEndpoints.addrDst.ToString();
                 session.oFlags["X-HostPort"]            = tcpsClient.tcpEndpoints.iDstPort.ToString();
                 session.Timers.ClientConnected          = tcpsClient.dtConnectStart;
                 session.Timers.ClientBeginRequest       = tcpsClient.dtFirstPayload;
                 session.Timers.FiddlerGotRequestHeaders = (session.Timers.FiddlerGotResponseHeaders = new DateTime(0L));
                 session.Timers.ServerConnected          = tcpsServer.dtConnectStart;
                 session.Timers.ServerBeginResponse      = tcpsServer.dtFirstPayload;
                 string sProcessInfo = tcpsClient.sProcessInfo;
                 if (!string.IsNullOrEmpty(sProcessInfo))
                 {
                     session.oFlags["X-ProcessInfo"] = sProcessInfo;
                 }
                 session.UNSTABLE_SetBitFlag((SessionFlags)1, true);
                 result = new Session[]
                 {
                     session
                 };
             }
         }
     }
     catch (Exception)
     {
         result = new Session[0];
     }
     return(result);
 }