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 }); }
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; }
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); }