• XSS.stack #1 – первый литературный журнал от юзеров форума

[C#]Http клиент-сервер с прокси

Ags1of

RAM
Пользователь
Регистрация
26.11.2021
Сообщения
122
Реакции
1
Всем привет, решил я значит сделать прогу для фильтрации трафика, чтобы была возможность блокировать загрузку сайтов, которые я внёс в ЧС, а открывать вместо них сайты-аналоги, так вот, сделал установку проксей в систему, чтобы браузеры хватали и использовали именно их(прокси - localhost), так вот перешёл я к самой реализации клиента и сервера, но что-то не получается, возможно из-за того, что я не до конца понимаю, как это должно работать, но я смог поднять простейшие Tcp сервер, использую TcpListener, оттуда я могу спокойно выводить запросы, которые идут на нужный мне прокси(локалхост), но далее я не могу никак работать с этими запросами, пытался поднять сервер с помощью HttpListener, да и в общем пространства имён System.Net, использую различные методы Http, но, не выходит, вот код, в котором я пытался что-то делать, помогите, пожалуйста, кто чем сможет. Мне нужно, чтобы сервер принимал пакеты от клиента(браузера), обрабатывал их, если нужно, подменял ссылку, но я так думаю, что там дело не столько в сервере, сколько в клиенте, потому что мне изначально нужно принимать пакеты клиента(браезура), а потом сервером отвечать на них(т.е. делать так, чтобы страница открывалась в браузере).
(В урле много комментариев, так как это всё неудачные попытки реализации клиент-сервера)

Код:
public static void Server(string message)
        {
            
            //var Listener = new HttpListener();
            //Console.WriteLine($"http://{ip}:{port}/");
            //Listener.Prefixes.Add($"http://{ip}:{port}/");
            //Listener.Start();

            Console.WriteLine("Сервер пошёл!");

            while (true)
            {
                //HttpListenerContext context = Listener.GetContext();
                //HttpListenerRequest req = context.Request;

                //Console.WriteLine($"Полученный пакет от: {req.Url}");

                //HttpListenerResponse resp = context.Response;

                //resp.Headers.Set("Content-Type", "text/plain");

                //string data = "Hello there!";
                //byte[] buffer = Encoding.UTF8.GetBytes(data);
                //resp.ContentLength64 = buffer.Length;

                //Stream ros = resp.OutputStream;
                //ros.Write(buffer, 0, buffer.Length);
            }
        }


        public static void ServerClient()
        {
            TcpListener server = new TcpListener(IPAddress.Parse(ip), port);

            try
            {
                server.Start();
                Console.WriteLine("Сервер пошёл!");
                while (true)
                {
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Входящее подключение " + client.Client.RemoteEndPoint);
                    while (true)
                    {

                        //WaitMessage(client);
                        var stream = client.GetStream(); //Создаём сетевой поток для работы с клиентом
                        byte[] data = new byte[1024];
                        int bytes = stream.Read(data, 0, data.Length);
                        
                        string message = Encoding.UTF8.GetString(data, 0, bytes);
                        string method = message.Split(' ')[0];
                        Console.WriteLine($"Сообщение: {message}, {method}");
                        
                        //Server(message);
                        Thread.Sleep(1000);
                        //Prinyatie_command(message, client);
                    }
                    //client.Close();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

        } //доделать


        public async Task  ReceivePacket(string RemoteEndPoint)
        {
            //HttpMethod _method = method;
            //var PrefixToListen = "http://"
            try
            {




                HttpClient httpClient = new HttpClient();
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://www.google.com");
                HttpResponseMessage response = httpClient.SendAsync(request).Result;
                Console.WriteLine(response.Content);
                Console.WriteLine(response.StatusCode.ToString());




                //HttpClient httpClient = new HttpClient();

                //HttpRequestMessage request = new HttpRequestMessage(_method, url);
                //var headers = request.Headers;
                //if (headers.Count() != 3)
                //{
                //    Console.WriteLine("Бэд реквест");
                //    return;
                //}
                //HttpMethod __method = request.Method;
                //Uri RequestUri = request.RequestUri;
                //Version vewrsion = request.Version;
                //MemoryStream ms = new MemoryStream();
                //HttpContent content = new StreamContent(ms);

                //HttpResponseMessage response = await httpClient.SendAsync(request);
                //Console.WriteLine(response.StatusCode.ToString());


                // await SendResponse(response);


            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх