diff --git a/CHANGELOG b/CHANGELOG index ff0ce10..a87ca95 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ proxy更新日志 v5.2 1.修复了HTTP(S)\SPS反向代理无法正常工作的问题. +2.优化了智能判断,减少不必要的DNS解析. v5.1 1.优化了kcp默认mtu配置,调整为450. diff --git a/sdk/android-ios/dns.go b/sdk/android-ios/dns.go index bb2dc4a..b08290d 100644 --- a/sdk/android-ios/dns.go +++ b/sdk/android-ios/dns.go @@ -76,7 +76,7 @@ func (s *DNS) InitService() (err error) { nil, &net.Dialer{ Timeout: 5 * time.Second, - KeepAlive: 5 * time.Second, + KeepAlive: 2 * time.Second, }, ) if err != nil { diff --git a/services/http/http.go b/services/http/http.go index 9159c7b..a1a14aa 100644 --- a/services/http/http.go +++ b/services/http/http.go @@ -277,10 +277,11 @@ func (s *HTTP) callback(inConn net.Conn) { } else if *s.cfg.Always { useProxy = true } else { - k := s.Resolve(address) - s.checker.Add(address, k) - //var n, m uint - useProxy, _, _ = s.checker.IsBlocked(k) + var isInMap bool + useProxy, isInMap, _, _ = s.checker.IsBlocked(address) + if !isInMap { + s.checker.Add(address, s.Resolve(address)) + } //s.log.Printf("blocked ? : %v, %s , fail:%d ,success:%d", useProxy, address, n, m) } } diff --git a/services/socks/socks.go b/services/socks/socks.go index 9069447..0f762d3 100644 --- a/services/socks/socks.go +++ b/services/socks/socks.go @@ -562,9 +562,11 @@ func (s *Socks) proxyTCP(inConn *net.Conn, methodReq socks.MethodsRequest, reque if utils.IsIternalIP(host, *s.cfg.Always) { useProxy = false } else { - k := s.Resolve(request.Addr()) - s.checker.Add(request.Addr(), k) - useProxy, _, _ = s.checker.IsBlocked(k) + var isInMap bool + useProxy, isInMap, _, _ = s.checker.IsBlocked(request.Addr()) + if !isInMap { + s.checker.Add(request.Addr(), s.Resolve(request.Addr())) + } } if useProxy { outConn, err = s.getOutConn(methodReq.Bytes(), request.Bytes(), request.Addr()) diff --git a/utils/structs.go b/utils/structs.go index d098240..62eec27 100644 --- a/utils/structs.go +++ b/utils/structs.go @@ -132,24 +132,24 @@ func (c *Checker) isNeedCheck(item CheckerItem) bool { } return true } -func (c *Checker) IsBlocked(address string) (blocked bool, failN, successN uint) { +func (c *Checker) IsBlocked(address string) (blocked, isInMap bool, failN, successN uint) { if c.domainIsInMap(address, true) { //log.Printf("%s in blocked ? true", address) - return true, 0, 0 + return true, true, 0, 0 } if c.domainIsInMap(address, false) { //log.Printf("%s in direct ? true", address) - return false, 0, 0 + return false, true, 0, 0 } _item, ok := c.data.Get(address) if !ok { //log.Printf("%s not in map, blocked true", address) - return true, 0, 0 + return true, false, 0, 0 } item := _item.(CheckerItem) - return item.FailCount >= item.SuccessCount, item.FailCount, item.SuccessCount + return item.FailCount >= item.SuccessCount, true, item.FailCount, item.SuccessCount } func (c *Checker) domainIsInMap(address string, blockedMap bool) bool { u, err := url.Parse("http://" + address)