Skip to content

Commit

Permalink
feat: port forwarding cli args
Browse files Browse the repository at this point in the history
  • Loading branch information
Mythologyli committed Feb 10, 2023
1 parent 7e671e2 commit cabb004
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@

+ `debug-dump`: 是否开启调试,一般不需要加此参数

+ `tcp-port-forwarding`: TCP 端口转发,格式为 `本地地址-远程地址,本地地址-远程地址,...`,例如 `127.0.0.1:9898-10.10.98.98:80,0.0.0.0:9899-10.10.98.98:80`。多个转发用 `,` 分隔

+ `udp-port-forwarding`: UDP 端口转发,格式为 `本地地址-远程地址,本地地址-远程地址,...`,例如 `127.0.0.1:53-10.10.0.21:53`。多个转发用 `,` 分隔

+ `twf-id`: twfID 登录,调试用途,一般不需要加此参数

+ `config`: 指定配置文件,内容参考 `config.toml.example`。启用配置文件时其他参数无效
Expand Down
42 changes: 41 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"flag"
"fmt"
"os"
"strings"

"github.com/BurntSushi/toml"
"github.com/mythologyli/zju-connect/core"
Expand Down Expand Up @@ -46,7 +47,10 @@ func getTomlVal[T int | uint64 | string | bool](valPointer *T, defaultVal T) T {

func main() {
// CLI args
host, port, username, password, disableServerConfig, disableZjuConfig, disableZjuDns, disableMultiLine, twfId, configFile := "", 0, "", "", false, false, false, false, "", ""
host, port, username, password := "", 0, "", ""
disableServerConfig, disableZjuConfig, disableZjuDns, disableMultiLine := false, false, false, false
twfId, configFile, tcpPortForwarding, udpPortForwarding := "", "", "", ""

flag.StringVar(&host, "server", "rvpn.zju.edu.cn", "EasyConnect server address")
flag.IntVar(&port, "port", 443, "EasyConnect port address")
flag.StringVar(&username, "username", "", "Your username")
Expand All @@ -62,6 +66,8 @@ func main() {
flag.StringVar(&core.HttpBind, "http-bind", ":1081", "The address HTTP server listens on (e.g. 127.0.0.1:1081)")
flag.Uint64Var(&core.DnsTTL, "dns-ttl", 3600, "DNS record time to live, unit is second")
flag.BoolVar(&core.DebugDump, "debug-dump", false, "Enable traffic debug dump (only for debug usage)")
flag.StringVar(&tcpPortForwarding, "tcp-port-forwarding", "", "TCP port forwarding (e.g. 0.0.0.0:9898-10.10.98.98:80,127.0.0.1:9899-10.10.98.98:80)")
flag.StringVar(&udpPortForwarding, "udp-port-forwarding", "", "UDP port forwarding (e.g. 127.0.0.1:53-10.10.0.21:53)")
flag.StringVar(&twfId, "twf-id", "", "Login using twfID captured (mostly for debug usage)")
flag.StringVar(&configFile, "config", "", "Config file")

Expand Down Expand Up @@ -138,6 +144,40 @@ func main() {
core.UseZjuDns = !disableZjuDns
core.TestMultiLine = !disableMultiLine

if tcpPortForwarding != "" {
forwardingStringList := strings.Split(tcpPortForwarding, ",")
for _, forwardingString := range forwardingStringList {
addressStringList := strings.Split(forwardingString, "-")
if len(addressStringList) != 2 {
fmt.Println("ZJU Connect: wrong tcp port forwarding format")
return
}

core.ForwardingList = append(core.ForwardingList, core.Forwarding{
NetworkType: "tcp",
BindAddress: addressStringList[0],
RemoteAddress: addressStringList[1],
})
}
}

if udpPortForwarding != "" {
forwardingStringList := strings.Split(udpPortForwarding, ",")
for _, forwardingString := range forwardingStringList {
addressStringList := strings.Split(forwardingString, "-")
if len(addressStringList) != 2 {
fmt.Println("ZJU Connect: wrong udp port forwarding format")
return
}

core.ForwardingList = append(core.ForwardingList, core.Forwarding{
NetworkType: "udp",
BindAddress: addressStringList[0],
RemoteAddress: addressStringList[1],
})
}
}

if host == "" || ((username == "" || password == "") && twfId == "") {
fmt.Println("ZJU Connect")
fmt.Println("Please see: https://github.com/mythologyli/zju-connect")
Expand Down

0 comments on commit cabb004

Please sign in to comment.