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更新日志 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只需要启动一个即可。

View File

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

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

View File

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

View File

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