v2.0.2: Auto-close duplicate instances on Windows
This commit is contained in:
parent
fdbdb663cb
commit
5e11303d1d
|
|
@ -0,0 +1,91 @@
|
||||||
|
## 🚀 TG WS Proxy Go v2.0.2
|
||||||
|
|
||||||
|
> **Go-переосмысление** [Flowseal/tg-ws-proxy](https://github.com/Flowseal/tg-ws-proxy)
|
||||||
|
> Локальный SOCKS5-прокси для Telegram Desktop на Go
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✨ Что нового в v2.0.2
|
||||||
|
|
||||||
|
| Функция | Статус |
|
||||||
|
|---------|--------|
|
||||||
|
| 🔗 **tg://socks ссылки** | ✅ Работают на Windows |
|
||||||
|
| 📲 **Авто-конфигурация Telegram** | ✅ Открывает настройки прокси |
|
||||||
|
| 🔄 **Автообновление** | ✅ Скачивает новую версию |
|
||||||
|
| 🌐 **IPv6 поддержка** | ✅ Через NAT64 |
|
||||||
|
| 🔐 **SOCKS5 аутентификация** | ✅ --auth username:password |
|
||||||
|
| 🛑 **Авто-закрытие дубликатов** | ✅ Завершает старые экземпляры |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔧 Исправления v2.0.2
|
||||||
|
|
||||||
|
- ✅ **Исправлено:** При запуске второго экземпляра первый автоматически закрывается
|
||||||
|
- ✅ **Улучшено:** Стабильность работы на Windows
|
||||||
|
- ✅ **Добавлено:** Проверка и завершение дублирующихся процессов
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📥 Скачать
|
||||||
|
|
||||||
|
| Платформа | Файл | Размер | Ссылка |
|
||||||
|
|-----------|------|--------|--------|
|
||||||
|
| **Windows x64** | TgWsProxy.exe | 6.6 MB | [⬇️ Скачать](https://github.com/y0sy4/tg-ws-proxy-go/releases/download/v2.0.2/TgWsProxy_windows_amd64.exe) |
|
||||||
|
| **Linux x64** | TgWsProxy | 6.5 MB | [⬇️ Скачать](https://github.com/y0sy4/tg-ws-proxy-go/releases/download/v2.0.2/TgWsProxy_linux_amd64) |
|
||||||
|
| **macOS Intel** | TgWsProxy | 6.6 MB | [⬇️ Скачать](https://github.com/y0sy4/tg-ws-proxy-go/releases/download/v2.0.2/TgWsProxy_darwin_amd64) |
|
||||||
|
| **macOS Apple Silicon** | TgWsProxy | 5.8 MB | [⬇️ Скачать](https://github.com/y0sy4/tg-ws-proxy-go/releases/download/v2.0.2/TgWsProxy_darwin_arm64) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🚀 Быстрый старт
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
1. Скачай `TgWsProxy.exe`
|
||||||
|
2. Запусти
|
||||||
|
3. Telegram автоматически откроет настройки прокси
|
||||||
|
4. Подтверди добавление
|
||||||
|
|
||||||
|
**Linux/macOS:**
|
||||||
|
```bash
|
||||||
|
chmod +x TgWsProxy_*
|
||||||
|
./TgWsProxy_linux_amd64 # или ./TgWsProxy_darwin_amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔧 Командная строка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./TgWsProxy [опции]
|
||||||
|
|
||||||
|
--port int Порт SOCKS5 (default 1080)
|
||||||
|
--host string Хост SOCKS5 (default "127.0.0.1")
|
||||||
|
--dc-ip string DC:IP через запятую
|
||||||
|
--auth string SOCKS5 аутентификация (username:password)
|
||||||
|
-v Подробное логирование
|
||||||
|
--version Показать версию
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📊 Сравнение с Python
|
||||||
|
|
||||||
|
| Метрика | Python | Go |
|
||||||
|
|---------|--------|-----|
|
||||||
|
| Размер | ~50 MB | **~6 MB** ⚡ |
|
||||||
|
| Зависимости | pip | **stdlib** ⚡ |
|
||||||
|
| Запуск | ~500 ms | **~50 ms** ⚡ |
|
||||||
|
| Память | ~50 MB | **~10 MB** ⚡ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔗 Ссылки
|
||||||
|
|
||||||
|
- 📦 **Релизы:** https://github.com/y0sy4/tg-ws-proxy-go/releases
|
||||||
|
- 📖 **Документация:** https://github.com/y0sy4/tg-ws-proxy-go#readme
|
||||||
|
- ❓ **FAQ:** https://github.com/y0sy4/tg-ws-proxy-go/blob/master/FAQ.md
|
||||||
|
- 🐛 **Баги:** https://github.com/y0sy4/tg-ws-proxy-go/issues
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Built with ❤️ using Go 1.21** | **License:** MIT
|
||||||
|
|
@ -7,10 +7,12 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Flowseal/tg-ws-proxy/internal/config"
|
"github.com/Flowseal/tg-ws-proxy/internal/config"
|
||||||
"github.com/Flowseal/tg-ws-proxy/internal/proxy"
|
"github.com/Flowseal/tg-ws-proxy/internal/proxy"
|
||||||
|
|
@ -20,8 +22,41 @@ import (
|
||||||
|
|
||||||
var appVersion = "2.0.0"
|
var appVersion = "2.0.0"
|
||||||
|
|
||||||
|
// checkAndKillExisting checks if another instance is running and terminates it
|
||||||
|
func checkAndKillExisting() {
|
||||||
|
exe, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
exeName := filepath.Base(exe)
|
||||||
|
|
||||||
|
// Find existing process (excluding current one)
|
||||||
|
cmd := exec.Command("wmic", "process", "where", fmt.Sprintf("name='%s' AND processid!='%d'", exeName, os.Getpid()), "get", "processid")
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse PIDs and kill them
|
||||||
|
lines := strings.Split(string(output), "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
|
if line == "" || line == "ProcessId" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Kill the old process
|
||||||
|
exec.Command("taskkill", "/F", "/PID", line).Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for processes to terminate
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Parse flags
|
// Check for existing instances and terminate them (Windows only)
|
||||||
|
if os.PathSeparator == '\\' {
|
||||||
|
checkAndKillExisting()
|
||||||
|
}
|
||||||
port := flag.Int("port", 1080, "Listen port")
|
port := flag.Int("port", 1080, "Listen port")
|
||||||
host := flag.String("host", "127.0.0.1", "Listen host")
|
host := flag.String("host", "127.0.0.1", "Listen host")
|
||||||
dcIP := flag.String("dc-ip", "", "Target DC IPs (comma-separated, e.g., 2:149.154.167.220,4:149.154.167.220)")
|
dcIP := flag.String("dc-ip", "", "Target DC IPs (comma-separated, e.g., 2:149.154.167.220,4:149.154.167.220)")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue