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

This commit is contained in:
arraykeys@gmail.com
2017-10-11 14:59:32 +08:00
parent 3984083e23
commit 787cc56ed4
17 changed files with 47 additions and 92 deletions

View File

@ -1,21 +1,8 @@
proxy更新日志
v3.2
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参数,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
1.内网穿透功能server端-r参数增加了协议和key设置.
2.手册增加了对-r参数的详细说明.
3.修复了普通模式也检查证书文件的bug.
v3.1
1.优化了内网穿透功能,bridge,client和server只需要启动一个即可。

View File

@ -92,7 +92,14 @@ func initConfig() (err error) {
serviceName := kingpin.MustParse(app.Parse(os.Args[1:]))
if *certTLS != "" && *keyTLS != "" {
if *httpArgs.ParentType == "tls" ||
*tcpArgs.ParentType == "tls" ||
*udpArgs.ParentType == "tls" ||
*httpArgs.LocalType == "tls" ||
*tcpArgs.IsTLS ||
serviceName == "tserver" ||
serviceName == "tclient" ||
serviceName == "tbridge" {
args.CertBytes, args.KeyBytes = tlsBytes(*certTLS, *keyTLS)
}
@ -103,6 +110,7 @@ func initConfig() (err error) {
tunnelBridgeArgs.Args = args
tunnelClientArgs.Args = args
tunnelServerArgs.Args = args
poster()
//regist services and run service
services.Regist("http", services.NewHTTP(), httpArgs)

View File

@ -1,40 +0,0 @@
这里以vps centos 64位为例子
Linux 部分
1.Putty工具或其他工具
root登入
2.下载批量命令文件install_auto.sh64位的话直接执行这个命令即可  
#curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash
注意
这里的install_auto.sh 源码可以下载修改proxy版本,保存后执行.
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image001.png?raw=true"/>
3.修改/etc/proxy/proxy.toml配置文件
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image002.png?raw=true"/>
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image003.png?raw=true"/>
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image004.png?raw=true"/>
#/usr/bin/proxyd status
如果未运行那么执行调试命令:/usr/bin/proxy  
如果一切正常,可以使用proxyd命令管理proxy,执行 proxyd 可以查看用法.
后台启动proxy: proxyd start
4.下载证书加密文件/etc/proxy/proxy.crt和/etc/proxy/proxy.key到windows  
Windows部分  
5.https://github.com/snail007/goproxy/releases 下载对应windows版本
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image005.jpg?raw=true"/>
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image006.png?raw=true"/>
我的是d
6.修改windows下的proxy.toml vps服务ip和上面设置的端口哦
<img src="https://github.com/snail007/goproxy/blob/master/docs/images/image007.png?raw=true"/>
然后运行proxy.exe即可.  
这时候浏览器代理服务器就是127.0.0.1:9501啦,完毕!
要隐藏windows命令用工具下载RunHiddenConsole.exe 写个bat文件都放proxy目录下就行
Start.bat
@echo off
echo Starting
RunHiddenConsole D:/proxy/proxy.exe
Stop.bat
@echo off
echo Stopping
taskkill /F /IM proxy.exe > nul
exit

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

View File

@ -25,6 +25,11 @@ func NewHTTP() Service {
basicAuth: utils.BasicAuth{},
}
}
func (s *HTTP) CheckArgs() {
if *s.cfg.Parent != "" && *s.cfg.ParentType == "" {
log.Fatalf("parent type unkown,use -T <tls|tcp>")
}
}
func (s *HTTP) InitService() {
s.InitBasicAuth()
if *s.cfg.Parent != "" {
@ -38,13 +43,12 @@ func (s *HTTP) StopService() {
}
func (s *HTTP) Start(args interface{}) (err error) {
s.cfg = args.(HTTPArgs)
s.CheckArgs()
if *s.cfg.Parent != "" {
log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent)
s.InitOutConnPool()
}
s.InitService()
host, port, _ := net.SplitHostPort(*s.cfg.Local)
p, _ := strconv.Atoi(port)
sc := utils.NewServerChannel(host, p)

View File

@ -24,6 +24,14 @@ func NewTCP() Service {
cfg: TCPArgs{},
}
}
func (s *TCP) CheckArgs() {
if *s.cfg.Parent == "" {
log.Fatalf("parent required for %s %s", s.cfg.Protocol(), *s.cfg.Local)
}
if *s.cfg.ParentType == "" {
log.Fatalf("parent type unkown,use -T <tls|tcp>")
}
}
func (s *TCP) InitService() {
s.InitOutConnPool()
}
@ -34,12 +42,8 @@ func (s *TCP) StopService() {
}
func (s *TCP) Start(args interface{}) (err error) {
s.cfg = args.(TCPArgs)
if *s.cfg.Parent != "" {
s.CheckArgs()
log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent)
} else {
log.Fatalf("parent required for %s %s", s.cfg.Protocol(), *s.cfg.Local)
}
s.InitService()
host, port, _ := net.SplitHostPort(*s.cfg.Local)

View File

@ -32,7 +32,7 @@ func NewTunnelBridge() Service {
func (s *TunnelBridge) InitService() {
}
func (s *TunnelBridge) Check() {
func (s *TunnelBridge) CheckArgs() {
if s.cfg.CertBytes == nil || s.cfg.KeyBytes == nil {
log.Fatalf("cert and key file required")
}
@ -43,7 +43,7 @@ func (s *TunnelBridge) StopService() {
}
func (s *TunnelBridge) Start(args interface{}) (err error) {
s.cfg = args.(TunnelBridgeArgs)
s.Check()
s.CheckArgs()
s.InitService()
host, port, _ := net.SplitHostPort(*s.cfg.Local)
p, _ := strconv.Atoi(port)

View File

@ -25,7 +25,7 @@ func NewTunnelClient() Service {
func (s *TunnelClient) InitService() {
}
func (s *TunnelClient) Check() {
func (s *TunnelClient) CheckArgs() {
if *s.cfg.Parent != "" {
log.Printf("use tls parent %s", *s.cfg.Parent)
} else {
@ -39,7 +39,7 @@ func (s *TunnelClient) StopService() {
}
func (s *TunnelClient) Start(args interface{}) (err error) {
s.cfg = args.(TunnelClientArgs)
s.Check()
s.CheckArgs()
s.InitService()
log.Printf("proxy on tunnel client mode")
for {

View File

@ -93,7 +93,7 @@ type UDPItem struct {
func (s *TunnelServer) InitService() {
s.UDPConnDeamon()
}
func (s *TunnelServer) Check() {
func (s *TunnelServer) CheckArgs() {
if *s.cfg.Remote == "" {
log.Fatalf("remote required")
}
@ -105,7 +105,7 @@ func (s *TunnelServer) StopService() {
}
func (s *TunnelServer) Start(args interface{}) (err error) {
s.cfg = args.(TunnelServerArgs)
s.Check()
s.CheckArgs()
s.InitService()
host, port, _ := net.SplitHostPort(*s.cfg.Local)
p, _ := strconv.Atoi(port)
@ -219,8 +219,7 @@ func (s *TunnelServer) UDPConnDeamon() {
var outConn net.Conn
// var hb utils.HeartbeatReadWriter
var ID string
var cmdChn = make(chan bool, 1)
// var cmdChn = make(chan bool, 1000)
var err error
for {
item := <-s.udpChn
@ -229,25 +228,19 @@ func (s *TunnelServer) UDPConnDeamon() {
for {
outConn, ID, err = s.GetOutConn("")
if err != nil {
cmdChn <- true
// cmdChn <- true
outConn = nil
utils.CloseConn(&outConn)
log.Printf("connect to %s fail, err: %s, retrying...", *s.cfg.Parent, err)
time.Sleep(time.Second * 3)
continue
} else {
// hb = utils.NewHeartbeatReadWriter(&outConn, 3, func(err error, hb *utils.HeartbeatReadWriter) {
// log.Printf("%s conn %s to bridge released", *s.cfg.Key, ID)
// hb.Close()
// })
// go func(outConn net.Conn, hb utils.HeartbeatReadWriter, ID string) {
go func(outConn net.Conn, ID string) {
go func() {
<-cmdChn
outConn.Close()
// <-cmdChn
// outConn.Close()
}()
for {
//srcAddrFromConn, body, err := utils.ReadUDPPacket(&hb)
srcAddrFromConn, body, err := utils.ReadUDPPacket(outConn)
if err == io.EOF || err == io.ErrUnexpectedEOF {
log.Printf("UDP deamon connection %s exited", ID)
@ -272,18 +265,13 @@ func (s *TunnelServer) UDPConnDeamon() {
}
//log.Printf("udp response to local %s success , %v", srcAddrFromConn, body)
}
// }(outConn, hb, ID)
}(outConn, ID)
break
}
}
}
outConn.SetWriteDeadline(time.Now().Add(time.Second))
// _, err = hb.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet))
_, err = outConn.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet))
// writer := bufio.NewWriter(outConn)
// writer.Write(utils.UDPPacket(item.srcAddr.String(), *item.packet))
// err := writer.Flush()
outConn.SetWriteDeadline(time.Time{})
if err != nil {
utils.CloseConn(&outConn)

View File

@ -27,6 +27,14 @@ func NewUDP() Service {
p: utils.NewConcurrentMap(),
}
}
func (s *UDP) CheckArgs() {
if *s.cfg.Parent == "" {
log.Fatalf("parent required for udp %s", *s.cfg.Local)
}
if *s.cfg.ParentType == "" {
log.Fatalf("parent type unkown,use -T <tls|tcp>")
}
}
func (s *UDP) InitService() {
if *s.cfg.ParentType != TYPE_UDP {
s.InitOutConnPool()
@ -39,12 +47,8 @@ func (s *UDP) StopService() {
}
func (s *UDP) Start(args interface{}) (err error) {
s.cfg = args.(UDPArgs)
if *s.cfg.Parent != "" {
s.CheckArgs()
log.Printf("use %s parent %s", *s.cfg.ParentType, *s.cfg.Parent)
} else {
log.Fatalf("parent required for udp %s", *s.cfg.Local)
}
s.InitService()
host, port, _ := net.SplitHostPort(*s.cfg.Local)