Guest User

Socks5ToHttpProxyServer

a guest
May 12th, 2021
46
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using MihaZupan;
  2. using System;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Threading;
  7.  
  8. namespace Socks5ToHttpProxy
  9. {
  10.     public class Program
  11.     {
  12.         private static void Main(string[] args)
  13.         {
  14.            
  15.             var listener = new HttpListener();
  16.             listener.Prefixes.Add("http://*:46353/");
  17.             listener.Start();
  18.             Console.WriteLine("Listening...");
  19.             while (true)
  20.             {
  21.                 var ctx = listener.GetContext();
  22.                 new Thread(new Relay(ctx, args).ProcessRequest).Start();
  23.             }
  24.         }
  25.     }
  26.  
  27.     public class Relay
  28.     {
  29.  
  30.         string host;
  31.         int port;
  32.         string user;
  33.         string passwd;
  34.         private readonly HttpListenerContext originalContext;
  35.  
  36.         public Relay(HttpListenerContext originalContext, string[] args)
  37.         {
  38.             this.originalContext = originalContext;
  39.             host = args[0];
  40.             port = int.Parse(args[1]);
  41.             user = args[2];
  42.             passwd = args[3];
  43.         }
  44.  
  45.         public void ProcessRequest()
  46.         {
  47.             string rawUrl = originalContext.Request.RawUrl;
  48.             Console.WriteLine("Proxy receive a request for: " + rawUrl);
  49.            
  50.             var relayRequest = (HttpWebRequest) WebRequest.Create(rawUrl);
  51.             relayRequest.KeepAlive = true;
  52.             try
  53.             {
  54.  
  55.                 foreach (var item in originalContext.Request.AcceptTypes)
  56.                 {
  57.                     relayRequest.Accept += item + " ";
  58.                 }
  59.             }
  60.             catch (Exception)
  61.             {
  62.             }
  63.            
  64.             try
  65.             {
  66.                 relayRequest.CookieContainer.Add(originalContext.Request.Cookies);
  67.             }
  68.             catch
  69.             {
  70.  
  71.             }
  72.             var proxy = new HttpToSocks5Proxy(host, port, user, passwd);
  73.             relayRequest.Proxy = proxy;
  74.             relayRequest.UserAgent = originalContext.Request.UserAgent;
  75.            
  76.             var requestData = new RequestState(relayRequest, originalContext);
  77.             relayRequest.BeginGetResponse(ResponseCallBack, requestData);
  78.         }
  79.  
  80.         private static void ResponseCallBack(IAsyncResult asynchronousResult)
  81.         {
  82.             var requestData = (RequestState) asynchronousResult.AsyncState;
  83.             Console.WriteLine("Proxy receive a response from " + requestData.context.Request.RawUrl);
  84.             try
  85.             {
  86.                 using (var responseFromWebSiteBeingRelayed = (HttpWebResponse)requestData.webRequest.EndGetResponse(asynchronousResult))
  87.                 {
  88.                     using (var responseStreamFromWebSiteBeingRelayed = responseFromWebSiteBeingRelayed.GetResponseStream())
  89.                     {
  90.                         var originalResponse = requestData.context.Response;
  91.  
  92.                         if (responseFromWebSiteBeingRelayed.ContentType.Contains("text/html"))
  93.                         {
  94.                             try
  95.                             {
  96.  
  97.                                 var reader = new StreamReader(responseStreamFromWebSiteBeingRelayed);
  98.                                 string html = reader.ReadToEnd();
  99.                                 byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(html);
  100.                                 var stream = new MemoryStream(byteArray);
  101.                                 stream.CopyTo(originalResponse.OutputStream);
  102.                             }
  103.                             catch (Exception ex)
  104.                             {
  105.                                 Console.WriteLine(ex.ToString());
  106.                             }
  107.                         }
  108.                         else
  109.                         {
  110.                             try
  111.                             {
  112.  
  113.                                 responseStreamFromWebSiteBeingRelayed.CopyTo(originalResponse.OutputStream);
  114.                             }
  115.                             catch (Exception ex)
  116.                             {
  117.                                 Console.WriteLine(ex.ToString());
  118.                             }
  119.                         }
  120.                         originalResponse.OutputStream.Close();
  121.                     }
  122.                 }
  123.             }
  124.             catch (Exception)
  125.             {
  126.  
  127.             }
  128.            
  129.         }
  130.     }
  131.  
  132.     public class RequestState
  133.     {
  134.         public readonly HttpWebRequest webRequest;
  135.         public readonly HttpListenerContext context;
  136.  
  137.         public RequestState(HttpWebRequest request, HttpListenerContext context)
  138.         {
  139.             webRequest = request;
  140.             this.context = context;
  141.         }
  142.     }
  143.  
  144. }
RAW Paste Data