forked from p1neappleXpress/OpenFlux
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
79 lines (67 loc) · 2.28 KB
/
Copy pathmain.go
File metadata and controls
79 lines (67 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"flag"
"fmt"
"log"
"os"
"strconv"
_ "github.com/wlynxg/anet"
"universal-bypass-tool/socks5"
"universal-bypass-tool/transport"
"universal-bypass-tool/transport/oneme"
"universal-bypass-tool/transport/yandex"
"universal-bypass-tool/tunnel"
"universal-bypass-tool/utils"
)
var (
globalDocUrl string
maxToken string
maxUid string
)
func main() {
//os.Setenv("GODEBUG", "netdns=go")
fmt.Print("written by p1neappleXpress\n")
exitNode := flag.Bool("exit-node", false, "Run as exit node (needs root)")
client := flag.Bool("client", false, "Run as client")
debug := flag.Bool("debug", false, "Enable verbose debug logging")
socksAddr := flag.String("socks5", ":1080", "SOCKS5 address")
transportType := flag.String("transport", "yandex", "Transport type (yandex, google, custom)")
flag.StringVar(&globalDocUrl, "url", "http://#", "Document URL. If u use Yandex.Docs transport")
flag.StringVar(&maxToken, "maxToken", "", "MAX call user id. If u use MAX transport")
flag.StringVar(&maxUid, "maxUid", "", "MAX Web token. If u use MAX transport")
flag.Parse()
if !*exitNode && !*client {
flag.Usage()
os.Exit(1)
}
if *debug {
utils.EnableDebug()
}
log.Printf("=== Universal Bypass Tool ===")
log.Printf("Mode: %s", map[bool]string{true: "EXIT NODE", false: "CLIENT"}[*exitNode])
log.Printf("Transport: %s", *transportType)
config := transport.DefaultConfig()
var trans transport.Transport
switch *transportType {
case "yandex":
trans = transport.NewCompressedTransport(yandex.NewYandexDocsTransport(globalDocUrl, config))
case "oneme":
uidint, _ := strconv.ParseInt(maxUid, 10, 64)
trans = transport.NewCompressedTransport(oneme.NewOneMeTransport(*exitNode, maxToken, uidint, config))
default:
log.Fatalf("Unknown transport type: %s", *transportType)
}
if err := trans.Start(); err != nil {
log.Fatalf("Failed to start transport: %v", err)
}
tun := tunnel.NewTCPTunnel(trans, *exitNode)
if *exitNode {
log.Printf("Running as EXIT NODE (needs root for raw socket)")
log.Printf("! Run: sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP")
select {}
} else {
log.Printf("Running as CLIENT (SOCKS5 on %s)", *socksAddr)
socks5Server := socks5.NewSOCKS5Server(*socksAddr, tun)
log.Fatal(socks5Server.Start())
}
}