Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
19
CHANGELOG
19
CHANGELOG
@ -1,11 +1,20 @@
|
|||||||
proxy更新日志
|
proxy更新日志
|
||||||
v3.2
|
v3.2
|
||||||
1.内网穿透功能server端-r参数增加了协议,默认是tcp://,可以是udp://.
|
1.内网穿透功能server端-r参数增加了协议和key设置
|
||||||
格式是:-r "协议://本地绑定IP:本地监听端口@clientHost:clientPort"
|
|
||||||
|
-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"
|
比如: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
|
||||||
如果指定了--udp参数,协议留空默认为udp://;
|
如果指定了--udp参数,PROTOCOL默认为udp;
|
||||||
如果没有指定--udp参数,协议留空默认为tcp://;
|
如果没有指定--udp参数,PROTOCOL默认为tcp;
|
||||||
本地绑定IP为空默认是绑定全部ip.
|
|
||||||
|
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
|
v3.1
|
||||||
1.优化了内网穿透功能,bridge,client和server只需要启动一个即可。
|
1.优化了内网穿透功能,bridge,client和server只需要启动一个即可。
|
||||||
|
|||||||
17
README.md
17
README.md
@ -332,7 +332,22 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
|||||||
|
|
||||||
1. 完成
|
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 tbridge`
|
||||||
`./proxy help tserver`
|
`./proxy help tserver`
|
||||||
`./proxy help tserver`
|
`./proxy help tserver`
|
||||||
|
|||||||
@ -78,9 +78,7 @@ func initConfig() (err error) {
|
|||||||
tunnelServerArgs.Timeout = tunnelServer.Flag("timeout", "tcp timeout with milliseconds").Short('t').Default("2000").Int()
|
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.IsUDP = tunnelServer.Flag("udp", "proxy on udp tunnel server mode").Default("false").Bool()
|
||||||
tunnelServerArgs.Key = tunnelServer.Flag("k", "client key").Default("default").String()
|
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.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()
|
||||||
//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()
|
|
||||||
|
|
||||||
//########tunnel-client#########
|
//########tunnel-client#########
|
||||||
tunnelClient := app.Command("tclient", "proxy on tunnel client mode")
|
tunnelClient := app.Command("tclient", "proxy on tunnel client mode")
|
||||||
|
|||||||
@ -146,7 +146,7 @@ func (s *TunnelClient) ServeUDP(localAddr, ID string) {
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
log.Printf("udp packet revecived fail, err: %s", err)
|
log.Printf("udp packet revecived fail, err: %s", err)
|
||||||
} else {
|
} 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)
|
go s.processUDPPacket(&inConn, srcAddr, localAddr, body)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +180,7 @@ func (s *TunnelClient) processUDPPacket(inConn *net.Conn, srcAddr, localAddr str
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
respBody := buf[0:length]
|
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)
|
bs := utils.UDPPacket(srcAddr, respBody)
|
||||||
_, err = (*inConn).Write(bs)
|
_, err = (*inConn).Write(bs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -188,7 +188,7 @@ func (s *TunnelClient) processUDPPacket(inConn *net.Conn, srcAddr, localAddr str
|
|||||||
utils.CloseConn(inConn)
|
utils.CloseConn(inConn)
|
||||||
return
|
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) {
|
func (s *TunnelClient) ServeConn(localAddr, ID string) {
|
||||||
var inConn, outConn net.Conn
|
var inConn, outConn net.Conn
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
@ -41,10 +42,9 @@ func (s *TunnelServerManager) Start(args interface{}) (err error) {
|
|||||||
}
|
}
|
||||||
//log.Printf("route:%v", *s.cfg.Route)
|
//log.Printf("route:%v", *s.cfg.Route)
|
||||||
for _, _info := range *s.cfg.Route {
|
for _, _info := range *s.cfg.Route {
|
||||||
IsUDP := s.cfg.IsUDP
|
IsUDP := *s.cfg.IsUDP
|
||||||
if strings.HasPrefix(_info, "udp://") {
|
if strings.HasPrefix(_info, "udp://") {
|
||||||
u := true
|
IsUDP = true
|
||||||
IsUDP = &u
|
|
||||||
}
|
}
|
||||||
info := strings.TrimPrefix(_info, "udp://")
|
info := strings.TrimPrefix(_info, "udp://")
|
||||||
info = strings.TrimPrefix(info, "tcp://")
|
info = strings.TrimPrefix(info, "tcp://")
|
||||||
@ -52,12 +52,20 @@ func (s *TunnelServerManager) Start(args interface{}) (err error) {
|
|||||||
server := NewTunnelServer()
|
server := NewTunnelServer()
|
||||||
local := _routeInfo[0]
|
local := _routeInfo[0]
|
||||||
remote := _routeInfo[1]
|
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{
|
err = server.Start(TunnelServerArgs{
|
||||||
Args: s.cfg.Args,
|
Args: s.cfg.Args,
|
||||||
Local: &local,
|
Local: &local,
|
||||||
IsUDP: IsUDP,
|
IsUDP: &IsUDP,
|
||||||
Remote: &remote,
|
Remote: &remote,
|
||||||
Key: s.cfg.Key,
|
Key: &KEY,
|
||||||
Timeout: s.cfg.Timeout,
|
Timeout: s.cfg.Timeout,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user