Http клиент-сервер с прокси

Рейтинг: 0Ответов: 0Опубликовано: 02.04.2023

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

Сразу скажу, что пользователь @aepot предлагал мне готовые решения, точнее, библиотеку для работы с запросами и вообще клиент-серверным взаимодействием, скидывал ссылки на на темы, где были готовые решения, но я так не хочу, хочу разобраться и иметь понимание в этом, я, конечно, мог взять код с некоторых тем, но там не было комментариев, следовательно, я мог что-то неправильно понять, а далее не иметь правильного понимания структуры программы, но я делаю это для своего понимая, опыта, а не для галочки, та же история с библиотекой TitaniumWebProxy, которая сделала бы всё за меня.

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

Ответы

Ответов пока нет.