Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
snail007 committed Nov 3, 2017
1 parent cc24cfc commit 9e9a9ac
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 42 deletions.
8 changes: 4 additions & 4 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
proxy更新日志
v3.5
1.优化了kcp参数,速度有所提升.

v3.4
1.tcp代理增加了kcp协议传输数据.
2.优化了死循环检查,增加了添加本地IP参数,当VPS在nat设备后面,
2.修复了socks无法正常工作的问题.
3.修正了文档中的一些描述.
4.tcp代理增加了kcp协议传输数据.
5.优化了死循环检查,增加了添加本地IP参数,当VPS在nat设备后面,
vps上网卡IP都是内网IP,这个时候可以通过-g参数添加vps的外网ip防止死循环.

v3.4
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```shell
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.下载自动安装脚本**
```shell
Expand Down
6 changes: 6 additions & 0 deletions release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

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
4 changes: 1 addition & 3 deletions services/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
utils.CloseConn(inConn)
utils.CloseConn(&outConn)
})
log.Printf("conn %s - %s connected [%s]", inAddr, outAddr, req.Host)

Expand Down
11 changes: 4 additions & 7 deletions services/socks.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,8 @@ func (s *Socks) socksConnCallback(inConn net.Conn) {
defer func() {
if err := recover(); err != nil {
log.Printf("socks conn handler crashed with err : %s \nstack: %s", err, string(debug.Stack()))
inConn.Close()
}
utils.CloseConn(&inConn)
}()
//协商开始

Expand Down Expand Up @@ -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) {
var outConn net.Conn
defer utils.CloseConn(&outConn)
var err interface{}
useProxy := true
tryCount := 0
Expand Down Expand Up @@ -428,7 +427,7 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
}
}
tryCount++
if err == nil || tryCount > maxTryCount {
if err == nil || tryCount > maxTryCount || *s.cfg.Parent == "" {
break
} else {
log.Printf("get out conn fail,%s,retrying...", err)
Expand All @@ -447,10 +446,8 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque
//inLocalAddr := (*inConn).LocalAddr().String()

log.Printf("conn %s - %s connected", inAddr, request.Addr())
utils.IoBind(*inConn, outConn, func(err error) {
log.Printf("conn %s - %s released %s", inAddr, request.Addr(), err)
utils.CloseConn(inConn)
utils.CloseConn(&outConn)
utils.IoBind(*inConn, outConn, func(err interface{}) {
log.Printf("conn %s - %s released", inAddr, request.Addr())
})
}
func (s *Socks) getOutConn(methodBytes, reqBytes []byte, host string) (outConn net.Conn, err interface{}) {
Expand Down
4 changes: 1 addition & 3 deletions services/tcp.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,8 @@ func (s *TCP) OutToTCP(inConn *net.Conn) (err error) {
//inLocalAddr := (*inConn).LocalAddr().String()
outAddr := outConn.RemoteAddr().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)
utils.CloseConn(inConn)
utils.CloseConn(&outConn)
})
log.Printf("conn %s - %s connected", inAddr, outAddr)
return
Expand Down
4 changes: 1 addition & 3 deletions services/tunnel_bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,7 @@ func (s *TunnelBridge) Start(args interface{}) (err error) {
return
}
serverConn := serverConnItem.(ServerConn).Conn
utils.IoBind(*serverConn, inConn, func(err error) {
(*serverConn).Close()
utils.CloseConn(&inConn)
utils.IoBind(*serverConn, inConn, func(err interface{}) {
s.serverConns.Remove(ID)
s.cmClient.RemoveOne(key, ID)
s.cmServer.RemoveOne(serverID, ID)
Expand Down
4 changes: 1 addition & 3 deletions services/tunnel_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,10 +273,8 @@ func (s *TunnelClient) ServeConn(localAddr, ID, serverID string) {
log.Printf("build connection error, err: %s", err)
return
}
utils.IoBind(inConn, outConn, func(err error) {
utils.IoBind(inConn, outConn, func(err interface{}) {
log.Printf("conn %s released", ID)
utils.CloseConn(&inConn)
utils.CloseConn(&outConn)
s.cm.RemoveOne(*s.cfg.Key, ID)
})
s.cm.Add(*s.cfg.Key, ID, &inConn)
Expand Down
4 changes: 1 addition & 3 deletions services/tunnel_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,9 +240,7 @@ func (s *TunnelServer) Start(args interface{}) (err error) {
break
}
}
utils.IoBind(inConn, outConn, func(err error) {
utils.CloseConn(&outConn)
utils.CloseConn(&inConn)
utils.IoBind(inConn, outConn, func(err interface{}) {
s.cfg.Mgr.cm.RemoveOne(s.cfg.Mgr.serverID, ID)
log.Printf("%s conn %s released", *s.cfg.Key, ID)
})
Expand Down
34 changes: 19 additions & 15 deletions utils/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,45 +20,49 @@ import (

"golang.org/x/crypto/pbkdf2"

"runtime/debug"
"strconv"
"strings"
"time"

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() {
e1 := make(chan error, 1)
e2 := make(chan error, 1)
defer func() {
if err := recover(); err != nil {
log.Printf("bind crashed %s", err)
}
}()
e1 := make(chan interface{}, 1)
e2 := make(chan interface{}, 1)
go func() {
defer func() {
if e := recover(); e != nil {
log.Printf("IoBind crashed , err : %s , \ntrace:%s", e, string(debug.Stack()))
if err := recover(); err != nil {
log.Printf("bind crashed %s", err)
}
}()
e := ioCopy(dst, src)
//_, e := io.Copy(dst, src)
e1 <- e
_, err := io.Copy(dst, src)
e1 <- err
}()
go func() {
defer func() {
if e := recover(); e != nil {
log.Printf("IoBind crashed , err : %s , \ntrace:%s", e, string(debug.Stack()))
if err := recover(); err != nil {
log.Printf("bind crashed %s", err)
}
}()
//_, e := io.Copy(src, dst)
e := ioCopy(src, dst)
e2 <- e
_, err := io.Copy(src, dst)
e2 <- err
}()
var err error
var err interface{}
select {
case err = <-e1:
//log.Printf("e1")
case err = <-e2:
//log.Printf("e2")
}
src.Close()
dst.Close()
fn(err)
}()
}
Expand Down

0 comments on commit 9e9a9ac

Please sign in to comment.