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