Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>

This commit is contained in:
arraykeys@gmail.com
2017-10-10 13:13:31 +08:00
parent 768e5dd6c0
commit b2549e8d48
5 changed files with 47 additions and 17 deletions

View File

@ -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只需要启动一个即可。

View File

@ -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`

View File

@ -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")

View File

@ -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

View File

@ -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 {