Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
19
CHANGELOG
19
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只需要启动一个即可。
|
||||
|
||||
17
README.md
17
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`
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user