// +build windows package proxy import ( "fmt" "os/exec" "strings" ) // EnableSystemProxy включает системный прокси в Windows func EnableSystemProxy(proxyAddr string) error { // Включаем прокси через реестр cmd := exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "1", "/f") if err := cmd.Run(); err != nil { return fmt.Errorf("ошибка включения прокси: %w", err) } // Устанавливаем адрес прокси cmd = exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyServer", "/t", "REG_SZ", "/d", fmt.Sprintf("socks=%s", proxyAddr), "/f") if err := cmd.Run(); err != nil { return fmt.Errorf("ошибка установки адреса прокси: %w", err) } // Обновляем настройки Internet Explorer (применяет изменения) refreshIESettings() return nil } // DisableSystemProxy отключает системный прокси в Windows func DisableSystemProxy() error { // Отключаем прокси cmd := exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "0", "/f") if err := cmd.Run(); err != nil { return fmt.Errorf("ошибка отключения прокси: %w", err) } // Очищаем адрес прокси cmd = exec.Command("reg", "delete", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyServer", "/f") cmd.Run() // Игнорируем ошибку, если ключ не существует // Обновляем настройки refreshIESettings() return nil } // GetSystemProxyStatus проверяет статус системного прокси func GetSystemProxyStatus() (bool, string, error) { // Проверяем, включен ли прокси cmd := exec.Command("reg", "query", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyEnable") output, err := cmd.Output() if err != nil { return false, "", nil } enabled := strings.Contains(string(output), "0x1") // Получаем адрес прокси cmd = exec.Command("reg", "query", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyServer") output, err = cmd.Output() proxyAddr := "" if err == nil { lines := strings.Split(string(output), "\n") for _, line := range lines { if strings.Contains(line, "ProxyServer") { parts := strings.Fields(line) if len(parts) >= 3 { proxyAddr = parts[len(parts)-1] } } } } return enabled, proxyAddr, nil } func refreshIESettings() { // Используем rundll32 для обновления настроек Internet Explorer cmd := exec.Command("rundll32.exe", "inetcpl.cpl,ClearMyTracksByProcess", "8") cmd.Run() }