feat(cli): add settings menu and VLESS log viewer with core selection
- Add settings menu to switch between Xray and V2Ray cores for VLESS connections - Implement core type persistence in configuration with LoadSettings/SaveSettings - Add VLESS error and access log viewer showing last 30 and 20 lines respectively - Display current core type and system time in main menu - Update VLESS connection to use selected core dynamically - Refactor monitor.go to accept 'q' key input for graceful exit instead of signal handling - Add proxy platform-specific implementations (proxy_unix.go, proxy_windows.go) - Add downloader module for managing binary resources - Include V2Ray and Xray configuration files and geodata (geoip.dat, geosite.dat) - Update CLI imports to include path/filepath and time packages - Improve user experience with core selection visibility and log diagnostics
This commit is contained in:
111
internal/proxy/proxy_windows.go
Normal file
111
internal/proxy/proxy_windows.go
Normal file
@@ -0,0 +1,111 @@
|
||||
// +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()
|
||||
}
|
||||
Reference in New Issue
Block a user