修复了socks5代理错误处理超时的问题.
This commit is contained in:
@ -11,6 +11,7 @@ v6.9
|
|||||||
# 是间隔符号,如果有认证信息,必须有#,没有认证信息可以省略#.
|
# 是间隔符号,如果有认证信息,必须有#,没有认证信息可以省略#.
|
||||||
2.2.2.2:33080 是上级地址
|
2.2.2.2:33080 是上级地址
|
||||||
@1 是设置权重,可以参考手册权重部分.
|
@1 是设置权重,可以参考手册权重部分.
|
||||||
|
4.修复了socks5代理错误处理超时的问题.
|
||||||
|
|
||||||
v6.8
|
v6.8
|
||||||
1.HTTP(S)\SOCKS5代理,API认证功能,发送给认证接口的参数增加了本地IP,local_ip字段,
|
1.HTTP(S)\SOCKS5代理,API认证功能,发送给认证接口的参数增加了本地IP,local_ip字段,
|
||||||
|
|||||||
@ -243,12 +243,12 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
//协商开始
|
//协商开始
|
||||||
//method select request
|
//method select request
|
||||||
var methodReq MethodsRequest
|
var methodReq MethodsRequest
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
|
|
||||||
methodReq, e := NewMethodsRequest((*s.conn), s.header)
|
methodReq, e := NewMethodsRequest((*s.conn), s.header)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
methodReq.Reply(socks5c.Method_NONE_ACCEPTABLE)
|
methodReq.Reply(socks5c.Method_NONE_ACCEPTABLE)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
err = fmt.Errorf("new methods request fail,ERR: %s", e)
|
err = fmt.Errorf("new methods request fail,ERR: %s", e)
|
||||||
@ -265,7 +265,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
// }
|
// }
|
||||||
s.method = socks5c.Method_NO_AUTH
|
s.method = socks5c.Method_NO_AUTH
|
||||||
//method select reply
|
//method select reply
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
err = methodReq.Reply(socks5c.Method_NO_AUTH)
|
err = methodReq.Reply(socks5c.Method_NO_AUTH)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -276,7 +276,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
} else {
|
} else {
|
||||||
//auth
|
//auth
|
||||||
if !methodReq.Select(socks5c.Method_USER_PASS) {
|
if !methodReq.Select(socks5c.Method_USER_PASS) {
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
methodReq.Reply(socks5c.Method_NONE_ACCEPTABLE)
|
methodReq.Reply(socks5c.Method_NONE_ACCEPTABLE)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
err = fmt.Errorf("none method found : Method_USER_PASS")
|
err = fmt.Errorf("none method found : Method_USER_PASS")
|
||||||
@ -284,7 +284,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
}
|
}
|
||||||
s.method = socks5c.Method_USER_PASS
|
s.method = socks5c.Method_USER_PASS
|
||||||
//method reply need auth
|
//method reply need auth
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
err = methodReq.Reply(socks5c.Method_USER_PASS)
|
err = methodReq.Reply(socks5c.Method_USER_PASS)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -294,7 +294,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
//read auth
|
//read auth
|
||||||
buf := make([]byte, 500)
|
buf := make([]byte, 500)
|
||||||
var n int
|
var n int
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
n, err = (*s.conn).Read(buf)
|
n, err = (*s.conn).Read(buf)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -309,7 +309,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
_userAddr := strings.Split(remoteAddr.String(), ":")
|
_userAddr := strings.Split(remoteAddr.String(), ":")
|
||||||
_localAddr := strings.Split(localAddr.String(), ":")
|
_localAddr := strings.Split(localAddr.String(), ":")
|
||||||
if s.auth == nil || (*s.auth).CheckUserPass(s.user, s.password, _userAddr[0], _localAddr[0], "") {
|
if s.auth == nil || (*s.auth).CheckUserPass(s.user, s.password, _userAddr[0], _localAddr[0], "") {
|
||||||
(*s.conn).SetDeadline(time.Now().Add(time.Millisecond * time.Duration(s.timeout)))
|
(*s.conn).SetDeadline(time.Now().Add(s.timeout))
|
||||||
_, err = (*s.conn).Write([]byte{0x01, 0x00})
|
_, err = (*s.conn).Write([]byte{0x01, 0x00})
|
||||||
(*s.conn).SetDeadline(time.Time{})
|
(*s.conn).SetDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -317,7 +317,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(*s.conn).SetDeadline(time.Now().Add(time.Millisecond * time.Duration(s.timeout)))
|
(*s.conn).SetDeadline(time.Now().Add(s.timeout))
|
||||||
_, err = (*s.conn).Write([]byte{0x01, 0x01})
|
_, err = (*s.conn).Write([]byte{0x01, 0x01})
|
||||||
(*s.conn).SetDeadline(time.Time{})
|
(*s.conn).SetDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -329,7 +329,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//request detail
|
//request detail
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
request, e := NewRequest(*s.conn)
|
request, e := NewRequest(*s.conn)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
|||||||
@ -110,12 +110,12 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
//协商开始
|
//协商开始
|
||||||
//method select request
|
//method select request
|
||||||
var methodReq MethodsRequest
|
var methodReq MethodsRequest
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
|
|
||||||
methodReq, e := NewMethodsRequest((*s.conn), s.header)
|
methodReq, e := NewMethodsRequest((*s.conn), s.header)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
methodReq.Reply(Method_NONE_ACCEPTABLE)
|
methodReq.Reply(Method_NONE_ACCEPTABLE)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
err = fmt.Errorf("new methods request fail,ERR: %s", e)
|
err = fmt.Errorf("new methods request fail,ERR: %s", e)
|
||||||
@ -124,7 +124,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
//log.Printf("%v,s.auth == %v && methodReq.Select(Method_NO_AUTH) %v", methodReq.methods, s.auth, methodReq.Select(Method_NO_AUTH))
|
//log.Printf("%v,s.auth == %v && methodReq.Select(Method_NO_AUTH) %v", methodReq.methods, s.auth, methodReq.Select(Method_NO_AUTH))
|
||||||
if s.auth == nil && methodReq.Select(Method_NO_AUTH) && !methodReq.Select(Method_USER_PASS) {
|
if s.auth == nil && methodReq.Select(Method_NO_AUTH) && !methodReq.Select(Method_USER_PASS) {
|
||||||
// if !methodReq.Select(Method_NO_AUTH) {
|
// if !methodReq.Select(Method_NO_AUTH) {
|
||||||
// (*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
// (*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
// methodReq.Reply(Method_NONE_ACCEPTABLE)
|
// methodReq.Reply(Method_NONE_ACCEPTABLE)
|
||||||
// (*s.conn).SetReadDeadline(time.Time{})
|
// (*s.conn).SetReadDeadline(time.Time{})
|
||||||
// err = fmt.Errorf("none method found : Method_NO_AUTH")
|
// err = fmt.Errorf("none method found : Method_NO_AUTH")
|
||||||
@ -132,7 +132,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
// }
|
// }
|
||||||
s.method = Method_NO_AUTH
|
s.method = Method_NO_AUTH
|
||||||
//method select reply
|
//method select reply
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
err = methodReq.Reply(Method_NO_AUTH)
|
err = methodReq.Reply(Method_NO_AUTH)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -143,7 +143,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
} else {
|
} else {
|
||||||
//auth
|
//auth
|
||||||
if !methodReq.Select(Method_USER_PASS) {
|
if !methodReq.Select(Method_USER_PASS) {
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
methodReq.Reply(Method_NONE_ACCEPTABLE)
|
methodReq.Reply(Method_NONE_ACCEPTABLE)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
err = fmt.Errorf("none method found : Method_USER_PASS")
|
err = fmt.Errorf("none method found : Method_USER_PASS")
|
||||||
@ -151,7 +151,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
}
|
}
|
||||||
s.method = Method_USER_PASS
|
s.method = Method_USER_PASS
|
||||||
//method reply need auth
|
//method reply need auth
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
err = methodReq.Reply(Method_USER_PASS)
|
err = methodReq.Reply(Method_USER_PASS)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -161,7 +161,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
//read auth
|
//read auth
|
||||||
buf := make([]byte, 500)
|
buf := make([]byte, 500)
|
||||||
var n int
|
var n int
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
n, err = (*s.conn).Read(buf)
|
n, err = (*s.conn).Read(buf)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -176,7 +176,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
_userAddr := strings.Split(remoteAddr.String(), ":")
|
_userAddr := strings.Split(remoteAddr.String(), ":")
|
||||||
_localAddr := strings.Split(localAddr.String(), ":")
|
_localAddr := strings.Split(localAddr.String(), ":")
|
||||||
if s.auth == nil || s.auth.CheckUserPass(s.user, s.password, _userAddr[0], _localAddr[0], "") {
|
if s.auth == nil || s.auth.CheckUserPass(s.user, s.password, _userAddr[0], _localAddr[0], "") {
|
||||||
(*s.conn).SetDeadline(time.Now().Add(time.Millisecond * time.Duration(s.timeout)))
|
(*s.conn).SetDeadline(time.Now().Add(s.timeout))
|
||||||
_, err = (*s.conn).Write([]byte{0x01, 0x00})
|
_, err = (*s.conn).Write([]byte{0x01, 0x00})
|
||||||
(*s.conn).SetDeadline(time.Time{})
|
(*s.conn).SetDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -184,7 +184,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(*s.conn).SetDeadline(time.Now().Add(time.Millisecond * time.Duration(s.timeout)))
|
(*s.conn).SetDeadline(time.Now().Add(s.timeout))
|
||||||
_, err = (*s.conn).Write([]byte{0x01, 0x01})
|
_, err = (*s.conn).Write([]byte{0x01, 0x01})
|
||||||
(*s.conn).SetDeadline(time.Time{})
|
(*s.conn).SetDeadline(time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -196,7 +196,7 @@ func (s *ServerConn) Handshake() (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//request detail
|
//request detail
|
||||||
(*s.conn).SetReadDeadline(time.Now().Add(time.Second * s.timeout))
|
(*s.conn).SetReadDeadline(time.Now().Add(s.timeout))
|
||||||
request, e := NewRequest(*s.conn)
|
request, e := NewRequest(*s.conn)
|
||||||
(*s.conn).SetReadDeadline(time.Time{})
|
(*s.conn).SetReadDeadline(time.Time{})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user