4
4
"flag"
5
5
"fmt"
6
6
"os"
7
+ "strings"
7
8
8
9
"github.com/BurntSushi/toml"
9
10
"github.com/mythologyli/zju-connect/core"
@@ -46,7 +47,10 @@ func getTomlVal[T int | uint64 | string | bool](valPointer *T, defaultVal T) T {
46
47
47
48
func main () {
48
49
// 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
+
50
54
flag .StringVar (& host , "server" , "rvpn.zju.edu.cn" , "EasyConnect server address" )
51
55
flag .IntVar (& port , "port" , 443 , "EasyConnect port address" )
52
56
flag .StringVar (& username , "username" , "" , "Your username" )
@@ -62,6 +66,8 @@ func main() {
62
66
flag .StringVar (& core .HttpBind , "http-bind" , ":1081" , "The address HTTP server listens on (e.g. 127.0.0.1:1081)" )
63
67
flag .Uint64Var (& core .DnsTTL , "dns-ttl" , 3600 , "DNS record time to live, unit is second" )
64
68
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)" )
65
71
flag .StringVar (& twfId , "twf-id" , "" , "Login using twfID captured (mostly for debug usage)" )
66
72
flag .StringVar (& configFile , "config" , "" , "Config file" )
67
73
@@ -138,6 +144,40 @@ func main() {
138
144
core .UseZjuDns = ! disableZjuDns
139
145
core .TestMultiLine = ! disableMultiLine
140
146
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
+
141
181
if host == "" || ((username == "" || password == "" ) && twfId == "" ) {
142
182
fmt .Println ("ZJU Connect" )
143
183
fmt .Println ("Please see: https://github.com/mythologyli/zju-connect" )
0 commit comments