Skip to content

Commit cabb004

Browse files
committed
feat: port forwarding cli args
1 parent 7e671e2 commit cabb004

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@
8080

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

83+
+ `tcp-port-forwarding`: TCP 端口转发,格式为 `本地地址-远程地址,本地地址-远程地址,...`,例如 `127.0.0.1:9898-10.10.98.98:80,0.0.0.0:9899-10.10.98.98:80`。多个转发用 `,` 分隔
84+
85+
+ `udp-port-forwarding`: UDP 端口转发,格式为 `本地地址-远程地址,本地地址-远程地址,...`,例如 `127.0.0.1:53-10.10.0.21:53`。多个转发用 `,` 分隔
86+
8387
+ `twf-id`: twfID 登录,调试用途,一般不需要加此参数
8488

8589
+ `config`: 指定配置文件,内容参考 `config.toml.example`。启用配置文件时其他参数无效

main.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"flag"
55
"fmt"
66
"os"
7+
"strings"
78

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

4748
func main() {
4849
// CLI args
49-
host, port, username, password, disableServerConfig, disableZjuConfig, disableZjuDns, disableMultiLine, twfId, configFile := "", 0, "", "", false, false, false, false, "", ""
50+
host, port, username, password := "", 0, "", ""
51+
disableServerConfig, disableZjuConfig, disableZjuDns, disableMultiLine := false, false, false, false
52+
twfId, configFile, tcpPortForwarding, udpPortForwarding := "", "", "", ""
53+
5054
flag.StringVar(&host, "server", "rvpn.zju.edu.cn", "EasyConnect server address")
5155
flag.IntVar(&port, "port", 443, "EasyConnect port address")
5256
flag.StringVar(&username, "username", "", "Your username")
@@ -62,6 +66,8 @@ func main() {
6266
flag.StringVar(&core.HttpBind, "http-bind", ":1081", "The address HTTP server listens on (e.g. 127.0.0.1:1081)")
6367
flag.Uint64Var(&core.DnsTTL, "dns-ttl", 3600, "DNS record time to live, unit is second")
6468
flag.BoolVar(&core.DebugDump, "debug-dump", false, "Enable traffic debug dump (only for debug usage)")
69+
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)")
70+
flag.StringVar(&udpPortForwarding, "udp-port-forwarding", "", "UDP port forwarding (e.g. 127.0.0.1:53-10.10.0.21:53)")
6571
flag.StringVar(&twfId, "twf-id", "", "Login using twfID captured (mostly for debug usage)")
6672
flag.StringVar(&configFile, "config", "", "Config file")
6773

@@ -138,6 +144,40 @@ func main() {
138144
core.UseZjuDns = !disableZjuDns
139145
core.TestMultiLine = !disableMultiLine
140146

147+
if tcpPortForwarding != "" {
148+
forwardingStringList := strings.Split(tcpPortForwarding, ",")
149+
for _, forwardingString := range forwardingStringList {
150+
addressStringList := strings.Split(forwardingString, "-")
151+
if len(addressStringList) != 2 {
152+
fmt.Println("ZJU Connect: wrong tcp port forwarding format")
153+
return
154+
}
155+
156+
core.ForwardingList = append(core.ForwardingList, core.Forwarding{
157+
NetworkType: "tcp",
158+
BindAddress: addressStringList[0],
159+
RemoteAddress: addressStringList[1],
160+
})
161+
}
162+
}
163+
164+
if udpPortForwarding != "" {
165+
forwardingStringList := strings.Split(udpPortForwarding, ",")
166+
for _, forwardingString := range forwardingStringList {
167+
addressStringList := strings.Split(forwardingString, "-")
168+
if len(addressStringList) != 2 {
169+
fmt.Println("ZJU Connect: wrong udp port forwarding format")
170+
return
171+
}
172+
173+
core.ForwardingList = append(core.ForwardingList, core.Forwarding{
174+
NetworkType: "udp",
175+
BindAddress: addressStringList[0],
176+
RemoteAddress: addressStringList[1],
177+
})
178+
}
179+
}
180+
141181
if host == "" || ((username == "" || password == "") && twfId == "") {
142182
fmt.Println("ZJU Connect")
143183
fmt.Println("Please see: https://github.com/mythologyli/zju-connect")

0 commit comments

Comments
 (0)