From b2549e8d48814eebdaa78cfa4bdd67c91510d064 Mon Sep 17 00:00:00 2001 From: "arraykeys@gmail.com" Date: Tue, 10 Oct 2017 13:13:31 +0800 Subject: [PATCH] Signed-off-by: arraykeys@gmail.com --- CHANGELOG | 19 ++++++++++++++----- README.md | 17 ++++++++++++++++- config.go | 4 +--- services/tunnel_client.go | 6 +++--- services/tunnel_server.go | 18 +++++++++++++----- 5 files changed, 47 insertions(+), 17 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index cf82c77..11d1e10 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,11 +1,20 @@ proxy更新日志 v3.2 -1.内网穿透功能server端-r参数增加了协议,默认是tcp://,可以是udp://. - 格式是:-r "协议://本地绑定IP:本地监听端口@clientHost:clientPort" +1.内网穿透功能server端-r参数增加了协议和key设置 + + -r 完整格式是:PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT + + 1.1.协议PROTOCOL:默认是tcp,可以是udp. 比如: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80" - 如果指定了--udp参数,协议留空默认为udp://; - 如果没有指定--udp参数,协议留空默认为tcp://; - 本地绑定IP为空默认是绑定全部ip. + 如果指定了--udp参数,PROTOCOL默认为udp; + 如果没有指定--udp参数,PROTOCOL默认为tcp; + + 1.2.CLIENT_KEY:默认是default. + 比如: -r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -r ":8080@:80" + 如果指定了--key参数,CLIENT_KEY留空默认为--key指定的值; + 如果没有指定--key参数,CLIENT_KEY留空默认为default;p; + + 1.3.LOCAL_IP为空默认是绑定全部ip.CLIENT_LOCAL_HOST留空默认是127.0.0.1 v3.1 1.优化了内网穿透功能,bridge,client和server只需要启动一个即可。 diff --git a/README.md b/README.md index ad2ec73..7801e00 100644 --- a/README.md +++ b/README.md @@ -332,7 +332,22 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid 1. 完成 -**4.7.查看帮助** +**4.7.tserver的-r参数** + -r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT` + + 4.7.1.协议PROTOCOL:tcp或者udp. + 比如: `-r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"` + 如果指定了--udp参数,PROTOCOL默认为udp,那么:`-r ":8080@:80"`默认为udp; + 如果没有指定--udp参数,PROTOCOL默认为tcp,那么:`-r ":8080@:80"`默认为tcp; + + 4.7.2.CLIENT_KEY:默认是default. + 比如: -r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -r ":8080@:80" + 如果指定了--k参数,比如--k test,那么:`-r ":8080@:80"`默认为test; + 如果没有指定--k参数,那么:`-r ":8080@:80"`默认为default; + + 4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`; + +**4.8.查看帮助** `./proxy help tbridge` `./proxy help tserver` `./proxy help tserver` diff --git a/config.go b/config.go index e67e460..fc5608a 100755 --- a/config.go +++ b/config.go @@ -78,9 +78,7 @@ func initConfig() (err error) { tunnelServerArgs.Timeout = tunnelServer.Flag("timeout", "tcp timeout with milliseconds").Short('t').Default("2000").Int() tunnelServerArgs.IsUDP = tunnelServer.Flag("udp", "proxy on udp tunnel server mode").Default("false").Bool() tunnelServerArgs.Key = tunnelServer.Flag("k", "client key").Default("default").String() - //tunnelServerArgs.Remote = tunnelServer.Flag("remote", "client's network host:port").Short('R').Default("").String() - //tunnelServerArgs.Local = tunnelServer.Flag("local", "local ip:port to listen").Short('p').Default(":33080").String() - tunnelServerArgs.Route = tunnelServer.Flag("route", "local route to client's network, such as :localip:localport@clienthost:clientport").Short('r').Default("").Strings() + tunnelServerArgs.Route = tunnelServer.Flag("route", "local route to client's network, such as :PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT").Short('r').Default("").Strings() //########tunnel-client######### tunnelClient := app.Command("tclient", "proxy on tunnel client mode") diff --git a/services/tunnel_client.go b/services/tunnel_client.go index 279e11e..58d5531 100644 --- a/services/tunnel_client.go +++ b/services/tunnel_client.go @@ -146,7 +146,7 @@ func (s *TunnelClient) ServeUDP(localAddr, ID string) { } else if err != nil { log.Printf("udp packet revecived fail, err: %s", err) } else { - log.Printf("udp packet revecived:%s,%v", srcAddr, body) + //log.Printf("udp packet revecived:%s,%v", srcAddr, body) go s.processUDPPacket(&inConn, srcAddr, localAddr, body) } @@ -180,7 +180,7 @@ func (s *TunnelClient) processUDPPacket(inConn *net.Conn, srcAddr, localAddr str return } respBody := buf[0:length] - log.Printf("revecived udp packet from %s , %v", dstAddr.String(), respBody) + //log.Printf("revecived udp packet from %s , %v", dstAddr.String(), respBody) bs := utils.UDPPacket(srcAddr, respBody) _, err = (*inConn).Write(bs) if err != nil { @@ -188,7 +188,7 @@ func (s *TunnelClient) processUDPPacket(inConn *net.Conn, srcAddr, localAddr str utils.CloseConn(inConn) return } - log.Printf("send udp response success ,from:%s ,%d ,%v", dstAddr.String(), len(bs), bs) + //log.Printf("send udp response success ,from:%s ,%d ,%v", dstAddr.String(), len(bs), bs) } func (s *TunnelClient) ServeConn(localAddr, ID string) { var inConn, outConn net.Conn diff --git a/services/tunnel_server.go b/services/tunnel_server.go index 3a8d361..a7c645e 100644 --- a/services/tunnel_server.go +++ b/services/tunnel_server.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/tls" "encoding/binary" + "fmt" "io" "log" "net" @@ -41,10 +42,9 @@ func (s *TunnelServerManager) Start(args interface{}) (err error) { } //log.Printf("route:%v", *s.cfg.Route) for _, _info := range *s.cfg.Route { - IsUDP := s.cfg.IsUDP + IsUDP := *s.cfg.IsUDP if strings.HasPrefix(_info, "udp://") { - u := true - IsUDP = &u + IsUDP = true } info := strings.TrimPrefix(_info, "udp://") info = strings.TrimPrefix(info, "tcp://") @@ -52,12 +52,20 @@ func (s *TunnelServerManager) Start(args interface{}) (err error) { server := NewTunnelServer() local := _routeInfo[0] remote := _routeInfo[1] + KEY := *s.cfg.Key + if strings.HasPrefix(remote, "[") { + KEY = remote[1:strings.LastIndex(remote, "]")] + remote = remote[strings.LastIndex(remote, "]")+1:] + } + if strings.HasPrefix(remote, ":") { + remote = fmt.Sprintf("127.0.0.1%s", remote) + } err = server.Start(TunnelServerArgs{ Args: s.cfg.Args, Local: &local, - IsUDP: IsUDP, + IsUDP: &IsUDP, Remote: &remote, - Key: s.cfg.Key, + Key: &KEY, Timeout: s.cfg.Timeout, }) if err != nil {