Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
@ -1,10 +1,10 @@
|
|||||||
proxy更新日志
|
proxy更新日志
|
||||||
v3.5
|
v3.5
|
||||||
1.优化了kcp参数,速度有所提升.
|
1.优化了kcp参数,速度有所提升.
|
||||||
|
2.修复了socks无法正常工作的问题.
|
||||||
v3.4
|
3.修正了文档中的一些描述.
|
||||||
1.tcp代理增加了kcp协议传输数据.
|
4.tcp代理增加了kcp协议传输数据.
|
||||||
2.优化了死循环检查,增加了添加本地IP参数,当VPS在nat设备后面,
|
5.优化了死循环检查,增加了添加本地IP参数,当VPS在nat设备后面,
|
||||||
vps上网卡IP都是内网IP,这个时候可以通过-g参数添加vps的外网ip防止死循环.
|
vps上网卡IP都是内网IP,这个时候可以通过-g参数添加vps的外网ip防止死循环.
|
||||||
|
|
||||||
v3.4
|
v3.4
|
||||||
|
|||||||
@ -116,7 +116,7 @@ wget https://github.com/reddec/monexec/releases/download/v0.1.1/monexec_0.1.1_li
|
|||||||
下载地址:https://github.com/snail007/goproxy/releases
|
下载地址:https://github.com/snail007/goproxy/releases
|
||||||
```shell
|
```shell
|
||||||
cd /root/proxy/
|
cd /root/proxy/
|
||||||
wget https://github.com/snail007/goproxy/releases/download/v3.1fix/proxy-linux-amd64.tar.gz
|
wget https://github.com/snail007/goproxy/releases/download/v3.4/proxy-linux-amd64.tar.gz
|
||||||
```
|
```
|
||||||
#### **3.下载自动安装脚本**
|
#### **3.下载自动安装脚本**
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
@ -61,3 +61,9 @@ GOOS=windows GOARCH=386 go build && tar zcfv "${RELEASE}/proxy-windows-386.tar.g
|
|||||||
GOOS=windows GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-windows-amd64.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
GOOS=windows GOARCH=amd64 go build && tar zcfv "${RELEASE}/proxy-windows-amd64.tar.gz" proxy.exe direct blocked .cert/proxy.crt .cert/proxy.key
|
||||||
|
|
||||||
rm -rf proxy proxy.exe .cert
|
rm -rf proxy proxy.exe .cert
|
||||||
|
|
||||||
|
#todo
|
||||||
|
#1.release.sh VER="xxx"
|
||||||
|
#2.main.go APP_VERSION="xxx"
|
||||||
|
#3.install_auto.sh goproxy/releases/download/vxxx
|
||||||
|
#4.README goproxy/releases/download/vxxx
|
||||||
@ -238,10 +238,8 @@ func (s *HTTP) OutToTCP(useProxy bool, address string, inConn *net.Conn, req *ut
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
utils.IoBind((*inConn), outConn, func(err error) {
|
utils.IoBind((*inConn), outConn, func(err interface{}) {
|
||||||
log.Printf("conn %s - %s released [%s]", inAddr, outAddr, req.Host)
|
log.Printf("conn %s - %s released [%s]", inAddr, outAddr, req.Host)
|
||||||
utils.CloseConn(inConn)
|
|
||||||
utils.CloseConn(&outConn)
|
|
||||||
})
|
})
|
||||||
log.Printf("conn %s - %s connected [%s]", inAddr, outAddr, req.Host)
|
log.Printf("conn %s - %s connected [%s]", inAddr, outAddr, req.Host)
|
||||||
|
|
||||||
|
|||||||
@ -293,8 +293,8 @@ func (s *Socks) socksConnCallback(inConn net.Conn) {
|
|||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
log.Printf("socks conn handler crashed with err : %s \nstack: %s", err, string(debug.Stack()))
|
log.Printf("socks conn handler crashed with err : %s \nstack: %s", err, string(debug.Stack()))
|
||||||
|
inConn.Close()
|
||||||
}
|
}
|
||||||
utils.CloseConn(&inConn)
|
|
||||||
}()
|
}()
|
||||||
//协商开始
|
//协商开始
|
||||||
|
|
||||||
@ -398,7 +398,6 @@ func (s *Socks) proxyUDP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
|
|||||||
}
|
}
|
||||||
func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, request socks.Request) {
|
func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, request socks.Request) {
|
||||||
var outConn net.Conn
|
var outConn net.Conn
|
||||||
defer utils.CloseConn(&outConn)
|
|
||||||
var err interface{}
|
var err interface{}
|
||||||
useProxy := true
|
useProxy := true
|
||||||
tryCount := 0
|
tryCount := 0
|
||||||
@ -428,7 +427,7 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
tryCount++
|
tryCount++
|
||||||
if err == nil || tryCount > maxTryCount {
|
if err == nil || tryCount > maxTryCount || *s.cfg.Parent == "" {
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
log.Printf("get out conn fail,%s,retrying...", err)
|
log.Printf("get out conn fail,%s,retrying...", err)
|
||||||
@ -447,10 +446,8 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
|
|||||||
//inLocalAddr := (*inConn).LocalAddr().String()
|
//inLocalAddr := (*inConn).LocalAddr().String()
|
||||||
|
|
||||||
log.Printf("conn %s - %s connected", inAddr, request.Addr())
|
log.Printf("conn %s - %s connected", inAddr, request.Addr())
|
||||||
utils.IoBind(*inConn, outConn, func(err error) {
|
utils.IoBind(*inConn, outConn, func(err interface{}) {
|
||||||
log.Printf("conn %s - %s released %s", inAddr, request.Addr(), err)
|
log.Printf("conn %s - %s released", inAddr, request.Addr())
|
||||||
utils.CloseConn(inConn)
|
|
||||||
utils.CloseConn(&outConn)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func (s *Socks) getOutConn(methodBytes, reqBytes []byte, host string) (outConn net.Conn, err interface{}) {
|
func (s *Socks) getOutConn(methodBytes, reqBytes []byte, host string) (outConn net.Conn, err interface{}) {
|
||||||
|
|||||||
@ -110,10 +110,8 @@ func (s *TCP) OutToTCP(inConn *net.Conn) (err error) {
|
|||||||
//inLocalAddr := (*inConn).LocalAddr().String()
|
//inLocalAddr := (*inConn).LocalAddr().String()
|
||||||
outAddr := outConn.RemoteAddr().String()
|
outAddr := outConn.RemoteAddr().String()
|
||||||
//outLocalAddr := outConn.LocalAddr().String()
|
//outLocalAddr := outConn.LocalAddr().String()
|
||||||
utils.IoBind((*inConn), outConn, func(err error) {
|
utils.IoBind((*inConn), outConn, func(err interface{}) {
|
||||||
log.Printf("conn %s - %s released", inAddr, outAddr)
|
log.Printf("conn %s - %s released", inAddr, outAddr)
|
||||||
utils.CloseConn(inConn)
|
|
||||||
utils.CloseConn(&outConn)
|
|
||||||
})
|
})
|
||||||
log.Printf("conn %s - %s connected", inAddr, outAddr)
|
log.Printf("conn %s - %s connected", inAddr, outAddr)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -112,9 +112,7 @@ func (s *TunnelBridge) Start(args interface{}) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
serverConn := serverConnItem.(ServerConn).Conn
|
serverConn := serverConnItem.(ServerConn).Conn
|
||||||
utils.IoBind(*serverConn, inConn, func(err error) {
|
utils.IoBind(*serverConn, inConn, func(err interface{}) {
|
||||||
(*serverConn).Close()
|
|
||||||
utils.CloseConn(&inConn)
|
|
||||||
s.serverConns.Remove(ID)
|
s.serverConns.Remove(ID)
|
||||||
s.cmClient.RemoveOne(key, ID)
|
s.cmClient.RemoveOne(key, ID)
|
||||||
s.cmServer.RemoveOne(serverID, ID)
|
s.cmServer.RemoveOne(serverID, ID)
|
||||||
|
|||||||
@ -273,10 +273,8 @@ func (s *TunnelClient) ServeConn(localAddr, ID, serverID string) {
|
|||||||
log.Printf("build connection error, err: %s", err)
|
log.Printf("build connection error, err: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
utils.IoBind(inConn, outConn, func(err error) {
|
utils.IoBind(inConn, outConn, func(err interface{}) {
|
||||||
log.Printf("conn %s released", ID)
|
log.Printf("conn %s released", ID)
|
||||||
utils.CloseConn(&inConn)
|
|
||||||
utils.CloseConn(&outConn)
|
|
||||||
s.cm.RemoveOne(*s.cfg.Key, ID)
|
s.cm.RemoveOne(*s.cfg.Key, ID)
|
||||||
})
|
})
|
||||||
s.cm.Add(*s.cfg.Key, ID, &inConn)
|
s.cm.Add(*s.cfg.Key, ID, &inConn)
|
||||||
|
|||||||
@ -240,9 +240,7 @@ func (s *TunnelServer) Start(args interface{}) (err error) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
utils.IoBind(inConn, outConn, func(err error) {
|
utils.IoBind(inConn, outConn, func(err interface{}) {
|
||||||
utils.CloseConn(&outConn)
|
|
||||||
utils.CloseConn(&inConn)
|
|
||||||
s.cfg.Mgr.cm.RemoveOne(s.cfg.Mgr.serverID, ID)
|
s.cfg.Mgr.cm.RemoveOne(s.cfg.Mgr.serverID, ID)
|
||||||
log.Printf("%s conn %s released", *s.cfg.Key, ID)
|
log.Printf("%s conn %s released", *s.cfg.Key, ID)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import (
|
|||||||
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
|
|
||||||
"runtime/debug"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -28,37 +27,42 @@ import (
|
|||||||
kcp "github.com/xtaci/kcp-go"
|
kcp "github.com/xtaci/kcp-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
func IoBind(dst io.ReadWriter, src io.ReadWriter, fn func(err error)) {
|
func IoBind(dst io.ReadWriteCloser, src io.ReadWriteCloser, fn func(err interface{})) {
|
||||||
go func() {
|
go func() {
|
||||||
e1 := make(chan error, 1)
|
defer func() {
|
||||||
e2 := make(chan error, 1)
|
if err := recover(); err != nil {
|
||||||
|
log.Printf("bind crashed %s", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
e1 := make(chan interface{}, 1)
|
||||||
|
e2 := make(chan interface{}, 1)
|
||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if e := recover(); e != nil {
|
if err := recover(); err != nil {
|
||||||
log.Printf("IoBind crashed , err : %s , \ntrace:%s", e, string(debug.Stack()))
|
log.Printf("bind crashed %s", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
e := ioCopy(dst, src)
|
_, err := io.Copy(dst, src)
|
||||||
//_, e := io.Copy(dst, src)
|
e1 <- err
|
||||||
e1 <- e
|
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if e := recover(); e != nil {
|
if err := recover(); err != nil {
|
||||||
log.Printf("IoBind crashed , err : %s , \ntrace:%s", e, string(debug.Stack()))
|
log.Printf("bind crashed %s", err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
//_, e := io.Copy(src, dst)
|
_, err := io.Copy(src, dst)
|
||||||
e := ioCopy(src, dst)
|
e2 <- err
|
||||||
e2 <- e
|
|
||||||
}()
|
}()
|
||||||
var err error
|
var err interface{}
|
||||||
select {
|
select {
|
||||||
case err = <-e1:
|
case err = <-e1:
|
||||||
//log.Printf("e1")
|
//log.Printf("e1")
|
||||||
case err = <-e2:
|
case err = <-e2:
|
||||||
//log.Printf("e2")
|
//log.Printf("e2")
|
||||||
}
|
}
|
||||||
|
src.Close()
|
||||||
|
dst.Close()
|
||||||
fn(err)
|
fn(err)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user