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

[C#]Не работает настройка прокси сервера

Ags1of

RAM
Пользователь
Регистрация
26.11.2021
Сообщения
122
Реакции
1
у меня есть такой код для настройки прокси в системе:


C#:
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

C#:
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" и нужный порт, как решить эту проблему, с чем она может быть связана?
 
Установка прокси и обновление настроек

C#:
namespace INetTool
{
    using System;
    using System.Runtime.InteropServices;
    using Microsoft.Win32;

    public static class INetProxy
    {
        //  INetProxy.SetProxy("2.23.143.150:443", 1);  // 1 - включаются прокси \ 0- выключаются
        public static void SetProxy(string proxyAddress, int enable)
        {
            const int INTERNET_OPTION_REFRESH = 37, INTERNET_OPTION_SETTINGS_CHANGED = 39;
            using var hiveCurReg = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32);
            using RegistryKey keyIS = hiveCurReg.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", Environment.Is64BitOperatingSystem);
            // string value = keyIS?.GetValue("ProxyServer")?.ToString(); // получить значение ProxyServer
            keyIS?.SetValue("ProxyEnable", enable); // установка вкл-выкл прокси сервера
            keyIS?.SetValue("ProxyServer", proxyAddress); // установка адреса прокси-сервера (2.23.143.150:443)

            // Применение настроек и обновление
            NativeMethods.InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
            NativeMethods.InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
        }
    }
    internal static class NativeMethods
    {
        [DllImport("wininet.dll")]
        public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    }
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
that is, I have to update the settings 2 times? At the beginning of the proxy insertion and at the end?
when you install the proxy refresh the settings and then start listing or redirect
 


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