public void SendHTTP(Request req, Socket browser) { try { string code = FormatRequest(req); Socket bridge = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = GetIPOfHost(req.headers["Host"]); if (ip == null) { if (browser != null) { browser.Close(); browser.Dispose(); browser = null; } return; } bridge.Connect(ip, 80); RawObj ro = new RawObj() { client = browser, data = new byte[2048], bridge = bridge }; bridge.Send(Encoding.ASCII.GetBytes(code)); bridge.BeginReceive(ro.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), ro); } catch (SocketException socketError) { //console.Debug($"Failed to tunnel http traffic for {r.headers["Host"]}: {socketError.ToString()}"); Console.WriteLine(socketError.ToString()); } }
private void ForwardRawHTTP(IAsyncResult ar) { try { //Console.WriteLine("Step 6"); RawObj data = (RawObj)ar.AsyncState; if (data.client == null || data.bridge == null) { return; } int bytesRead = data.bridge.EndReceive(ar); if (bytesRead > 0) { //Console.WriteLine("Step 7"); byte[] toSend = new byte[bytesRead]; Array.Copy(data.data, toSend, bytesRead); data.client.Send(toSend, 0, toSend.Length, SocketFlags.None); Array.Clear(toSend, 0, bytesRead); } else { if (data.client != null) { data.client.Close(); data.client.Dispose(); data.client = null; } if (data.bridge != null) { data.bridge.Close(); data.bridge.Dispose(); data.bridge = null; } return; } data.data = new byte[2048]; data.bridge.BeginReceive(data.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), data); } catch (Exception e) { //Console.WriteLine($"Forawrd Raw HTTP failed: {e.ToString()}"); } }
public void SendHTTPS(Socket browser) { //if (https == ProxyServer.Mode.MITM) return; try { Socket bridge = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = GetIPOfHost(_host); if (ip == null) { if (browser != null) { browser.Close(); browser.Dispose(); browser = null; } return; } //Console.WriteLine("Step 5"); bridge.Connect(ip, 443); RawSSLObj rso = new RawSSLObj() { fullText = "", request = null, rawData = new RawObj { data = new byte[2048], client = browser, bridge = bridge } }; RawObj ro = new RawObj() { data = new byte[2048], bridge = bridge, client = browser }; bridge.BeginReceive(ro.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), ro); browser.BeginReceive(rso.rawData.data, 0, 2048, SocketFlags.None, new AsyncCallback(ReadBrowser), rso); GenerateVerify(browser); } catch (SocketException socketError) { Console.WriteLine(socketError.ToString()); } }
public IEnumerator News() { if (mysource == NewSource.pp) { url = "http://feeds.propublica.org/propublica/main"; } if (mysource == NewSource.ap) { url = "http://hosted2.ap.org/atom/APDEFAULT/3d281c11a96b4ad082fe88aa0db04305"; } if (mysource == NewSource.cnn) { url = "http://rss.cnn.com/rss/cnn_topstories.rss"; } WWW www = new WWW(url); yield return(www); if (www.isDone) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(www.text); XmlNodeList titleList; XmlNodeList summaryList; nsmgr = new XmlNamespaceManager(xmlDoc.NameTable); nsmgr.AddNamespace("ab", "http://www.w3.org/2005/Atom"); //xmlDoc.SelectNodes ("//id"); //xmlDoc.DocumentElement.ChildNodes; //Debug.Log (xmlDoc.InnerText); if (mysource == NewSource.ap) { summaryList = xmlDoc.DocumentElement.SelectNodes("//ab:entry", nsmgr); foreach (XmlNode xmlNode in summaryList) { xmlNode.RemoveChild(xmlNode.FirstChild); } Debug.Log(summaryList.Count); for (int i = 0; i < newsObjs.Count; i++) { TextMeshProUGUI titleText = newsObjs[i].transform.GetChild(0).GetComponent <TextMeshProUGUI>(); titleText.text = summaryList[i].FirstChild.InnerText; //title newsObjs[i].transform.GetChild(1).GetComponent <TextMeshProUGUI>().text = summaryList[i].ChildNodes[1].InnerText; //body RawObj tempObj = new RawObj(); tempObj.Title = titleText.text; tempObj.Summary = summaryList[i].ChildNodes[1].InnerText; tempObj.posID = i; newsStories.Add(tempObj); } } if (mysource == NewSource.pp) { summaryList = xmlDoc.DocumentElement.SelectNodes("//item", nsmgr); for (int i = 0; i < newsObjs.Count; i++) { //Debug.Log(summaryList[i].FirstChild.InnerText);//title string result = Regex.Replace(summaryList[i].ChildNodes[4].InnerText, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", string.Empty); result = result.TrimStart(); Debug.Log(result); //string[] x = summaryList[i].ChildNodes[4].InnerText.Split(); } } if (mysource == NewSource.cnn) { for (int i = 0; i < newsObjs.Count; i++) { summaryList = xmlDoc.DocumentElement.SelectNodes("//item", nsmgr); string result = Regex.Replace(summaryList[i].ChildNodes[1].InnerText, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", string.Empty); newsObjs[i].transform.GetChild(0).GetComponent <TextMeshProUGUI>().text = summaryList[i].ChildNodes[0].InnerText; newsObjs[i].transform.GetChild(1).GetComponent <TextMeshProUGUI>().text = result; } } } }