Не работает настройка прокси сервера

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

у меня есть такой код для настройки прокси в системе:

public static void NewSetProxy()

    {

        try

        {

            var proxyServerAddress = "127.0.0.1"; // адрес прокси-сервера

            var proxyServerPort = "8484"; // порт прокси-сервера

            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);



            // Включить использование прокси-сервера

            registry.SetValue("ProxyEnable", 1);



            // Установить адрес и порт прокси-сервера

            registry.SetValue("ProxyServer", $"{proxyServerAddress}:{proxyServerPort}");



            // Применить настройки

            registry.Close();

            RefreshInternetSettings();





            ////RegistryKey registry = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);

            //RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);



            //// устанавливаем значения в реестре Windows для всех браузеров

            //registry.SetValue("ProxyServer",

            //                  $"{proxyServerAddress}:{proxyServerPort}");



            //registry.SetValue("ProxyEnable",

            //                  "1");

            //InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);

            //InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);

            Console.WriteLine("Прокси были применены_________________________");

        }

        catch (Exception ex)

        {

            Console.WriteLine(ex.ToString());

        }

    }



    public static void UnsetProxy()

    {

        //RegistryKey registry = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);

        //RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);

        //string proxyAddr = proxyhost.Split(':')[0];

        try

        {

            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);



            // Отключить использование прокси-сервера

            registry.SetValue("ProxyEnable", 0);



            // Удалить адрес и порт прокси-сервера

            registry.DeleteValue("ProxyServer", false);



            // Применить настройки

            registry.Close();

            RefreshInternetSettings();



            //registry.SetValue("ProxyEnable", 0);

            //registry.SetValue("ProxyServer", 0);

            //if ((int)registry.GetValue("ProxyEnable", 1) == 1)

            //    Console.WriteLine("");

            //else { }

            //InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);

            //InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);



        }

        catch (Exception ex)

        {

            Console.WriteLine(ex.ToString());

        } //{ //Console.WriteLine("Ошибка: " + ex.ToString()); }



    }

    private static void RefreshInternetSettings()

    {

        // Обновить настройки Интернета

        InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);

        InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);

    }

И есть такой код для отлова пакетов и переадресации с vk.com на youtube.com

public static ProxyServer proxyServer = new ProxyServer();



 public static void Start()

    {



            proxyServer.CertificateManager.CertificateEngine = CertificateEngine.BouncyCastle;







            var endpoint = new ExplicitProxyEndPoint(System.Net.IPAddress.Any, 8484, true);

            proxyServer.AddEndPoint(endpoint);

            proxyServer.ServerCertificateValidationCallback += OnCertificateValidation;

            proxyServer.BeforeRequest += OnRequest;

            //proxyServer.ClientCertificateSelectionCallback -= OnCertificateSelection;

            //Thread.Sleep(1000);

            X509Certificate2 cert = new X509Certificate2(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "rootCert.pfx"));



            // создаем объект хранилища корневых сертификатов

            X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);



            // открываем хранилище для записи

            store.Open(OpenFlags.ReadWrite);



            // добавляем сертификат в хранилище

            store.Add(cert);



            // закрываем хранилище

            store.Close();

            proxyServer.Start();

            Console.WriteLine("ОСНОВНОЙ СЕРВЕР ЗАПУСТИЛИ!");





    }



    public static void Stop()

    {

        proxyServer.BeforeRequest -= OnRequest;

        proxyServer.Stop();

        Console.WriteLine("СТОПАНУЛ СЕРВАК!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

    }



    private static async Task OnRequest(object sender, SessionEventArgs e)

    {



        Console.WriteLine("Зашли в редирект");

        Console.WriteLine(e.HttpClient.Request.RequestUri.Host.ToString());

        var host = e.HttpClient.Request.RequestUri.Host.ToLower();

        var host_ip = e.HttpClient.Request.RequestUriString.ToLower();

        Console.WriteLine(host);

        Console.WriteLine(host_ip);



        if (e.HttpClient.Request.RequestUri.Host.ToString().Contains("vk.com"))

        {

            Console.WriteLine("Редиректаем на ЮТТТТТТТТТТТТТТТТТТТТТТТТТТТТТ");

            e.Redirect("https://youtube.com");

            Console.WriteLine("РЕДИРЕКТНУЛИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИ");

        }



    }





 

    //static extern IntPtr GetForegroundWindow();



    private static Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)

    {

        // игнорирование некоторых ошибок SSL-сертификата

        if (e.SslPolicyErrors == System.Net.Security.SslPolicyErrors.None)

        {

            e.IsValid = true;

        }



        if (e.SslPolicyErrors == System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors)

        {

            foreach (X509ChainStatus chainStatus in e.Chain.ChainStatus)

            {

                if (chainStatus.Status != X509ChainStatusFlags.RevocationStatusUnknown &&

                    chainStatus.Status != X509ChainStatusFlags.NoError)

                {

                    e.IsValid = false;

                }

            }



            e.IsValid = true;

        }



        //return false;

        return Task.CompletedTask;

    }

Я думал, что не работает код для отлова пакетов и переадресации с vk.com на youtube.com на других компьютерах, хотя в нём нет ошибок и скачаны все нужные для его работы библиотеки, на моём компьютере он работает,но, когда мой друг запускает его, то он не работает, я немного подебажил его, проводил тесты и увидел, что программа не работает из-за того, что, скорее всего, не устанавливаются прокси в систему, потому что, когда мой друг сам в настройках системы указал адрес прокси "127.0.0.1" и нужный порт, потом запустил мой код, то он начал ловить пакеты и делать переадресацию, в настройках браузера используются системные прокси, но, видимо, мой код, почему-то, не устанавливает в настройки системных прокси адрес прокси "127.0.0.1" и нужный порт, как решить эту проблему, с чем она может быть связана?

Ответы

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