vtun/main.go
2022-02-16 21:20:26 +08:00

64 lines
1.6 KiB
Go

package main
import (
"flag"
"log"
"net/http"
"github.com/net-byte/vtun/common/config"
"github.com/net-byte/vtun/tcp"
"github.com/net-byte/vtun/udp"
"github.com/net-byte/vtun/ws"
)
func main() {
config := config.Config{}
flag.StringVar(&config.CIDR, "c", "172.16.0.10/24", "tun interface CIDR")
flag.StringVar(&config.LocalAddr, "l", ":3000", "local address")
flag.StringVar(&config.ServerAddr, "s", ":3001", "server address")
flag.StringVar(&config.Key, "k", "6w9z$C&F)J@NcRfWjXn3r4u7x!A%D*G-", "key")
flag.StringVar(&config.Protocol, "p", "wss", "protocol tcp/udp/ws/wss")
flag.StringVar(&config.DNS, "d", "8.8.8.8:53", "dns address")
flag.StringVar(&config.WebSocketPath, "path", "/way-to-freedom", "websocket path")
flag.BoolVar(&config.ServerMode, "S", false, "server mode")
flag.BoolVar(&config.GlobalMode, "g", false, "client global mode")
flag.BoolVar(&config.Obfuscate, "obfs", false, "enable obfuscation")
flag.BoolVar(&config.Pprof, "P", false, "enable pporf server on :6060")
flag.Parse()
config.Init()
if config.Pprof {
go func() {
log.Printf("pprof server on :6060")
if err := http.ListenAndServe(":6060", nil); err != nil {
log.Printf("pprof failed: %v", err)
}
}()
}
switch config.Protocol {
case "udp":
if config.ServerMode {
udp.StartServer(config)
} else {
udp.StartClient(config)
}
case "tcp":
if config.ServerMode {
tcp.StartServer(config)
} else {
tcp.StartClient(config)
}
case "ws":
if config.ServerMode {
ws.StartServer(config)
} else {
ws.StartClient(config)
}
default:
if config.ServerMode {
ws.StartServer(config)
} else {
ws.StartClient(config)
}
}
}