From 573216befbea3399f36e8b4358cd2e4365a0e0e1 Mon Sep 17 00:00:00 2001 From: Skyxim Date: Thu, 27 Apr 2023 01:39:29 +0000 Subject: [PATCH 1/5] fix: tracker remote addr check --- tunnel/statistic/tracker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tunnel/statistic/tracker.go b/tunnel/statistic/tracker.go index c4feeddb..0eaf4820 100644 --- a/tunnel/statistic/tracker.go +++ b/tunnel/statistic/tracker.go @@ -112,7 +112,7 @@ func (tt *tcpTracker) Upstream() any { func NewTCPTracker(conn C.Conn, manager *Manager, metadata *C.Metadata, rule C.Rule, uploadTotal int64, downloadTotal int64, pushToManager bool) *tcpTracker { if conn != nil { - if tcpAddr, ok := conn.RemoteAddr().(*net.TCPAddr); ok { + if tcpAddr, ok := conn.RemoteAddr().(*net.TCPAddr); ok && tcpAddr.IP != nil { metadata.RemoteDst = tcpAddr.IP.String() } else { metadata.RemoteDst = conn.RemoteDestination() From e4f762822a8613edb9b77227f9876a805f85fa26 Mon Sep 17 00:00:00 2001 From: Skyxim Date: Thu, 27 Apr 2023 02:32:25 +0000 Subject: [PATCH 2/5] chore: better parse remote dst --- tunnel/statistic/tracker.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/tunnel/statistic/tracker.go b/tunnel/statistic/tracker.go index 0eaf4820..170cbc99 100644 --- a/tunnel/statistic/tracker.go +++ b/tunnel/statistic/tracker.go @@ -3,6 +3,7 @@ package statistic import ( "io" "net" + "net/netip" "time" "github.com/Dreamacro/clash/common/atomic" @@ -110,13 +111,24 @@ func (tt *tcpTracker) Upstream() any { return tt.Conn } +func parseRemoteDestination(addr net.Addr, conn C.Connection) string { + if addr == nil && conn != nil { + return conn.RemoteDestination() + } + if addrPort, err := netip.ParseAddrPort(addr.String()); err == nil && addrPort.Addr().IsValid() { + return addrPort.Addr().String() + } else { + if conn != nil { + return conn.RemoteDestination() + } else { + return "" + } + } +} + func NewTCPTracker(conn C.Conn, manager *Manager, metadata *C.Metadata, rule C.Rule, uploadTotal int64, downloadTotal int64, pushToManager bool) *tcpTracker { if conn != nil { - if tcpAddr, ok := conn.RemoteAddr().(*net.TCPAddr); ok && tcpAddr.IP != nil { - metadata.RemoteDst = tcpAddr.IP.String() - } else { - metadata.RemoteDst = conn.RemoteDestination() - } + metadata.RemoteDst = parseRemoteDestination(conn.RemoteAddr(), conn) } t := &tcpTracker{ @@ -190,7 +202,7 @@ func (ut *udpTracker) Close() error { } func NewUDPTracker(conn C.PacketConn, manager *Manager, metadata *C.Metadata, rule C.Rule, uploadTotal int64, downloadTotal int64, pushToManager bool) *udpTracker { - metadata.RemoteDst = conn.RemoteDestination() + metadata.RemoteDst = parseRemoteDestination(nil, conn) ut := &udpTracker{ PacketConn: conn, From 928dcf9af9665af763190db52315f619435a3076 Mon Sep 17 00:00:00 2001 From: Skyxim Date: Thu, 27 Apr 2023 06:55:53 +0000 Subject: [PATCH 3/5] chore: better memory fetching time --- tunnel/statistic/manager.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/tunnel/statistic/manager.go b/tunnel/statistic/manager.go index 381ea7e6..ba2e1298 100644 --- a/tunnel/statistic/manager.go +++ b/tunnel/statistic/manager.go @@ -61,6 +61,7 @@ func (m *Manager) Now() (up int64, down int64) { } func (m *Manager) Memory() uint64 { + m.updateMemory() return m.memory } @@ -70,16 +71,6 @@ func (m *Manager) Snapshot() *Snapshot { connections = append(connections, value.(tracker)) return true }) - - getMem := func() uint64 { - stat, err := m.process.MemoryInfo() - if err != nil { - return 0 - } - return stat.RSS - } - m.memory = getMem() - return &Snapshot{ UploadTotal: m.uploadTotal.Load(), DownloadTotal: m.downloadTotal.Load(), @@ -88,6 +79,14 @@ func (m *Manager) Snapshot() *Snapshot { } } +func (m *Manager) updateMemory() { + stat, err := m.process.MemoryInfo() + if err != nil { + return + } + m.memory = stat.RSS +} + func (m *Manager) ResetStatistic() { m.uploadTemp.Store(0) m.uploadBlip.Store(0) From 87d2d08a8f67705bc2ef27e5af497b542cafbbb7 Mon Sep 17 00:00:00 2001 From: Skyxim Date: Thu, 27 Apr 2023 07:06:53 +0000 Subject: [PATCH 4/5] chore: `clash` filter link local --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 24594ee2..71f4087e 100644 --- a/config/config.go +++ b/config/config.go @@ -841,7 +841,7 @@ func parseHosts(cfg *RawConfig) (*trie.DomainTrie[resolver.HostValue], error) { } else { ips := make([]netip.Addr, 0) for _, addr := range addrs { - if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback()&&!ipnet.IP.IsLinkLocalUnicast() { if ip, err := netip.ParseAddr(ipnet.IP.String()); err == nil { ips = append(ips, ip) } From 898f10ca96626cd4f85ed7289c6ebf2942192c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 27 Apr 2023 22:18:09 +0800 Subject: [PATCH 5/5] Fix concurrent close on h2mux server conn --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5e805c16..0d4a638e 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/oschwald/geoip2-golang v1.8.0 github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 github.com/sagernet/sing v0.2.5-0.20230425211221-a23ffbaeb5b9 - github.com/sagernet/sing-mux v0.0.0-20230425130511-b0a6ffd8406f + github.com/sagernet/sing-mux v0.0.0-20230427141602-9836fc9b052e github.com/sagernet/sing-shadowtls v0.1.2-0.20230417103049-4f682e05f19b github.com/sagernet/sing-vmess v0.1.5-0.20230417103030-8c3070ae3fb3 github.com/sagernet/tfo-go v0.0.0-20230303015439-ffcfd8c41cf9 diff --git a/go.sum b/go.sum index 5d251c05..37cc84b1 100644 --- a/go.sum +++ b/go.sum @@ -147,8 +147,8 @@ github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2 github.com/sagernet/sing v0.1.8/go.mod h1:jt1w2u7lJQFFSGLiRrRIs5YWmx4kAPfWuOejuDW9qMk= github.com/sagernet/sing v0.2.5-0.20230425211221-a23ffbaeb5b9 h1:kpgKJbhesj6BBLTKIfBCJGQPm2ww7pNxn566C6TrHdA= github.com/sagernet/sing v0.2.5-0.20230425211221-a23ffbaeb5b9/go.mod h1:Ta8nHnDLAwqySzKhGoKk4ZIB+vJ3GTKj7UPrWYvM+4w= -github.com/sagernet/sing-mux v0.0.0-20230425130511-b0a6ffd8406f h1:iEpOTgBTjt0vZJVXMTqYq13XyIu/337TWbq6WZ3CMWc= -github.com/sagernet/sing-mux v0.0.0-20230425130511-b0a6ffd8406f/go.mod h1:pF+RnLvCAOhECrvauy6LYOpBakJ/vuaF1Wm4lPsWryI= +github.com/sagernet/sing-mux v0.0.0-20230427141602-9836fc9b052e h1:t8nuY9plpHEzlnPxOpuv64jhjz3teIvccu3YMFX4fJI= +github.com/sagernet/sing-mux v0.0.0-20230427141602-9836fc9b052e/go.mod h1:pF+RnLvCAOhECrvauy6LYOpBakJ/vuaF1Wm4lPsWryI= github.com/sagernet/sing-shadowtls v0.1.2-0.20230417103049-4f682e05f19b h1:ouW/6IDCrxkBe19YSbdCd7buHix7b+UZ6BM4Zz74XF4= github.com/sagernet/sing-shadowtls v0.1.2-0.20230417103049-4f682e05f19b/go.mod h1:oG8bPerYI6cZ74KquY3DvA7ynECyrILPBnce6wtBqeI= github.com/sagernet/sing-vmess v0.1.5-0.20230417103030-8c3070ae3fb3 h1:BHOnxrbC929JonuKqFdJ7ZbDp7zs4oTlH5KFvKtWu9U=