From c90a77a1857a4c1f926331f14a1089429fbf14df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sun, 25 Sep 2022 22:16:24 +0800 Subject: [PATCH] Refine 4in6 processing --- Makefile | 3 ++- common/dialer/default.go | 2 +- common/process/searcher.go | 8 +------- common/proxyproto/listener.go | 4 ++-- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ inbound/default.go | 6 +++--- inbound/default_udp.go | 8 ++++---- inbound/hysteria.go | 6 +++--- inbound/tproxy.go | 11 ++++------- route/rule_cidr.go | 14 +++----------- transport/hysteria/protocol.go | 6 +++--- 12 files changed, 44 insertions(+), 60 deletions(-) diff --git a/Makefile b/Makefile index 3f42aa40..a92171c9 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,7 @@ test: cd test && \ go mod tidy && \ go test -v -tags "$(TAGS_TEST)" . + test_stdio: @go test -v ./... && \ cd test && \ @@ -71,7 +72,7 @@ test_stdio: go test -v -tags "$(TAGS_TEST),force_stdio" . clean: - rm -rf bin dist + rm -rf bin dist sing-box rm -f $(shell go env GOPATH)/sing-box update: diff --git a/common/dialer/default.go b/common/dialer/default.go index ebe03fa2..16a0b521 100644 --- a/common/dialer/default.go +++ b/common/dialer/default.go @@ -146,7 +146,7 @@ func (d *DefaultDialer) DialContext(ctx context.Context, network string, address case N.NetworkUDP: return d.udpDialer.DialContext(ctx, network, address.String()) } - return d.dialer.DialContext(ctx, network, address.Unwrap().String()) + return d.dialer.DialContext(ctx, network, address.String()) } func (d *DefaultDialer) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) { diff --git a/common/process/searcher.go b/common/process/searcher.go index d6f67a0b..d5a86543 100644 --- a/common/process/searcher.go +++ b/common/process/searcher.go @@ -28,11 +28,5 @@ type Info struct { } func FindProcessInfo(searcher Searcher, ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error) { - info, err := findProcessInfo(searcher, ctx, network, source, destination) - if err != nil { - if source.Addr().Is4In6() { - info, err = findProcessInfo(searcher, ctx, network, netip.AddrPortFrom(netip.AddrFrom4(source.Addr().As4()), source.Port()), destination) - } - } - return info, err + return findProcessInfo(searcher, ctx, network, source, destination) } diff --git a/common/proxyproto/listener.go b/common/proxyproto/listener.go index 068e32ef..f61d227e 100644 --- a/common/proxyproto/listener.go +++ b/common/proxyproto/listener.go @@ -36,8 +36,8 @@ func (l *Listener) Accept() (net.Conn, error) { } if header != nil { return &bufio.AddrConn{Conn: conn, Metadata: M.Metadata{ - Source: M.SocksaddrFromNet(header.SourceAddr), - Destination: M.SocksaddrFromNet(header.DestinationAddr), + Source: M.SocksaddrFromNet(header.SourceAddr).Unwrap(), + Destination: M.SocksaddrFromNet(header.DestinationAddr).Unwrap(), }}, nil } return conn, nil diff --git a/go.mod b/go.mod index 83e1d6b4..83cb4c4b 100644 --- a/go.mod +++ b/go.mod @@ -23,10 +23,10 @@ require ( github.com/pires/go-proxyproto v0.6.2 github.com/refraction-networking/utls v1.1.2 github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb - github.com/sagernet/sing v0.0.0-20220921101604-86d7d510231f + github.com/sagernet/sing v0.0.0-20220925112014-b12b8b7fd220 github.com/sagernet/sing-dns v0.0.0-20220915084601-812e0864b45b github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 - github.com/sagernet/sing-tun v0.0.0-20220922083325-80ee99472704 + github.com/sagernet/sing-tun v0.0.0-20220925112147-6bad0c2380ca github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685 github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 github.com/sagernet/websocket v0.0.0-20220913015213-615516348b4e @@ -34,10 +34,10 @@ require ( github.com/stretchr/testify v1.8.0 go.etcd.io/bbolt v1.3.6 go.uber.org/atomic v1.10.0 - go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d - golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 - golang.org/x/net v0.0.0-20220909164309-bea034e7d591 - golang.org/x/sys v0.0.0-20220913120320-3275c407cedc + go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab + golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7 + golang.org/x/net v0.0.0-20220923203811-8be639271d50 + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 golang.zx2c4.com/wireguard v0.0.0-20220829161405-d1d08426b27b google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 diff --git a/go.sum b/go.sum index 901affd5..42a58892 100644 --- a/go.sum +++ b/go.sum @@ -145,14 +145,14 @@ github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb h1:wc0yQ+SBn4TaTY github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb/go.mod h1:MIccjRKnPTjWwAOpl+AUGWOkzyTd9tERytudxu+1ra4= github.com/sagernet/sing v0.0.0-20220812082120-05f9836bff8f/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY= -github.com/sagernet/sing v0.0.0-20220921101604-86d7d510231f h1:GX416thAwyc0vHBOal/qplvdhFgYO2dHD5GqADCJ0Ig= -github.com/sagernet/sing v0.0.0-20220921101604-86d7d510231f/go.mod h1:x3NHUeJBQwV75L51zwmLKQdLtRvR+M4PmXkfQtU1vIY= +github.com/sagernet/sing v0.0.0-20220925112014-b12b8b7fd220 h1:fQk/BHOeHw5murjeNTdmkXmDy9cMlbubRINRH7GDuu4= +github.com/sagernet/sing v0.0.0-20220925112014-b12b8b7fd220/go.mod h1:5/u6RMDMoGIkSNtrZb41kJvyIFg3Ysn69P3WiAu8m0c= github.com/sagernet/sing-dns v0.0.0-20220915084601-812e0864b45b h1:cXCMNJ9heZ+c6l+qUcku60x9KyXo4SOAaJfg/6spOmU= github.com/sagernet/sing-dns v0.0.0-20220915084601-812e0864b45b/go.mod h1:SrvWLfOSlnFmH32CWXicfilAGgIXR0VjrH6yRbuXYww= github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 h1:JJfDeYYhWunvtxsU/mOVNTmFQmnzGx9dY034qG6G3g4= github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6/go.mod h1:EX3RbZvrwAkPI2nuGa78T2iQXmrkT+/VQtskjou42xM= -github.com/sagernet/sing-tun v0.0.0-20220922083325-80ee99472704 h1:DOQQXQbB2gq4n2FuMHrL07HRs2naCCsuiu/9l1JFb9A= -github.com/sagernet/sing-tun v0.0.0-20220922083325-80ee99472704/go.mod h1:5AhPUv9jWDQ3pv3Mj78SL/1TSjhoaj6WNASxRKLqXqM= +github.com/sagernet/sing-tun v0.0.0-20220925112147-6bad0c2380ca h1:Owgx9izFNYyMyUZ61td+mL3vumBhJz4zNismYlCyQbw= +github.com/sagernet/sing-tun v0.0.0-20220925112147-6bad0c2380ca/go.mod h1:ftP5VXlp3RJO5+WS3mPFk7jB9B/K/QrPEZX3BUORGQY= github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685 h1:AZzFNRR/ZwMTceUQ1b/mxx6oyKqmFymdMn/yleJmoVM= github.com/sagernet/sing-vmess v0.0.0-20220925083655-063bc85ea685/go.mod h1:bwhAdSNET1X+j9DOXGj9NIQR39xgcWIk1rOQ9lLD+gM= github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 h1:5VBIbVw9q7aKbrFdT83mjkyvQ+VaRsQ6yflTepfln38= @@ -188,16 +188,16 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= -go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d h1:ggxwEf5eu0l8v+87VhX1czFh8zJul3hK16Gmruxn7hw= -go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= +go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab h1:+yW1yrZ09EYNu1spCUOHBBNRbrLnfmutwyhbhCv3b6Q= +go4.org/netipx v0.0.0-20220925034521-797b0c90d8ab/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY= -golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7 h1:WJywXQVIb56P2kAvXeMGTIgQ1ZHQxR60+F9dLsodECc= +golang.org/x/crypto v0.0.0-20220924013350-4ba4fb4dd9e7/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= @@ -229,8 +229,8 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220923203811-8be639271d50 h1:vKyz8L3zkd+xrMeIaBsQ/MNVPVFSffdaU3ZyYlBGFnI= +golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -264,8 +264,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220913120320-3275c407cedc h1:dpclq5m2YrqPGStKmtw7IcNbKLfbIqKXvNxDJKdIKYc= -golang.org/x/sys v0.0.0-20220913120320-3275c407cedc/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/inbound/default.go b/inbound/default.go index 187c688f..b45b5543 100644 --- a/inbound/default.go +++ b/inbound/default.go @@ -141,13 +141,13 @@ func (a *myInboundAdapter) createMetadata(conn net.Conn, metadata adapter.Inboun metadata.SniffOverrideDestination = a.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(a.listenOptions.DomainStrategy) if !metadata.Source.IsValid() { - metadata.Source = M.SocksaddrFromNet(conn.RemoteAddr()) + metadata.Source = M.SocksaddrFromNet(conn.RemoteAddr()).Unwrap() } if !metadata.Destination.IsValid() { - metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()) + metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()).Unwrap() } if tcpConn, isTCP := common.Cast[*net.TCPConn](conn); isTCP { - metadata.OriginDestination = M.SocksaddrFromNet(tcpConn.LocalAddr()) + metadata.OriginDestination = M.SocksaddrFromNet(tcpConn.LocalAddr()).Unwrap() } return metadata } diff --git a/inbound/default_udp.go b/inbound/default_udp.go index c163fb58..3436311a 100644 --- a/inbound/default_udp.go +++ b/inbound/default_udp.go @@ -54,7 +54,7 @@ func (a *myInboundAdapter) loopUDPIn() { metadata.SniffEnabled = a.listenOptions.SniffEnabled metadata.SniffOverrideDestination = a.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(a.listenOptions.DomainStrategy) - metadata.Source = M.SocksaddrFromNetIP(addr) + metadata.Source = M.SocksaddrFromNetIP(addr).Unwrap() metadata.OriginDestination = a.udpAddr err = a.packetHandler.NewPacket(a.ctx, packetService, buffer, metadata) if err != nil { @@ -86,7 +86,7 @@ func (a *myInboundAdapter) loopUDPOOBIn() { metadata.SniffEnabled = a.listenOptions.SniffEnabled metadata.SniffOverrideDestination = a.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(a.listenOptions.DomainStrategy) - metadata.Source = M.SocksaddrFromNetIP(addr) + metadata.Source = M.SocksaddrFromNetIP(addr).Unwrap() metadata.OriginDestination = a.udpAddr err = a.oobPacketHandler.NewPacket(a.ctx, packetService, buffer, oob[:oobN], metadata) if err != nil { @@ -112,7 +112,7 @@ func (a *myInboundAdapter) loopUDPInThreadSafe() { metadata.SniffEnabled = a.listenOptions.SniffEnabled metadata.SniffOverrideDestination = a.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(a.listenOptions.DomainStrategy) - metadata.Source = M.SocksaddrFromNetIP(addr) + metadata.Source = M.SocksaddrFromNetIP(addr).Unwrap() metadata.OriginDestination = a.udpAddr err = a.packetHandler.NewPacket(a.ctx, packetService, buffer, metadata) if err != nil { @@ -140,7 +140,7 @@ func (a *myInboundAdapter) loopUDPOOBInThreadSafe() { metadata.SniffEnabled = a.listenOptions.SniffEnabled metadata.SniffOverrideDestination = a.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(a.listenOptions.DomainStrategy) - metadata.Source = M.SocksaddrFromNetIP(addr) + metadata.Source = M.SocksaddrFromNetIP(addr).Unwrap() metadata.OriginDestination = a.udpAddr err = a.oobPacketHandler.NewPacket(a.ctx, packetService, buffer, oob[:oobN], metadata) if err != nil { diff --git a/inbound/hysteria.go b/inbound/hysteria.go index 642d101c..55ba8937 100644 --- a/inbound/hysteria.go +++ b/inbound/hysteria.go @@ -261,9 +261,9 @@ func (h *Hysteria) acceptStream(ctx context.Context, conn quic.Connection, strea metadata.SniffEnabled = h.listenOptions.SniffEnabled metadata.SniffOverrideDestination = h.listenOptions.SniffOverrideDestination metadata.DomainStrategy = dns.DomainStrategy(h.listenOptions.DomainStrategy) - metadata.Source = M.SocksaddrFromNet(conn.RemoteAddr()) - metadata.OriginDestination = M.SocksaddrFromNet(conn.LocalAddr()) - metadata.Destination = M.ParseSocksaddrHostPort(request.Host, request.Port) + metadata.Source = M.SocksaddrFromNet(conn.RemoteAddr()).Unwrap() + metadata.OriginDestination = M.SocksaddrFromNet(conn.LocalAddr()).Unwrap() + metadata.Destination = M.ParseSocksaddrHostPort(request.Host, request.Port).Unwrap() if !request.UDP { err = hysteria.WriteServerResponse(stream, hysteria.ServerResponse{ diff --git a/inbound/tproxy.go b/inbound/tproxy.go index 46162737..fa557425 100644 --- a/inbound/tproxy.go +++ b/inbound/tproxy.go @@ -75,7 +75,7 @@ func (t *TProxy) Start() error { } func (t *TProxy) NewConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error { - metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()) + metadata.Destination = M.SocksaddrFromNet(conn.LocalAddr()).Unwrap() return t.newConnection(ctx, conn, metadata) } @@ -84,9 +84,9 @@ func (t *TProxy) NewPacket(ctx context.Context, conn N.PacketConn, buffer *buf.B if err != nil { return E.Cause(err, "get tproxy destination") } - metadata.Destination = M.SocksaddrFromNetIP(destination) + metadata.Destination = M.SocksaddrFromNetIP(destination).Unwrap() t.udpNat.NewContextPacket(ctx, metadata.Source.AddrPort(), buffer, adapter.UpstreamMetadata(metadata), func(natConn N.PacketConn) (context.Context, N.PacketWriter) { - return adapter.WithContext(log.ContextWithNewID(ctx), &metadata), &tproxyPacketWriter{ctx: ctx, source: natConn} + return adapter.WithContext(log.ContextWithNewID(ctx), &metadata), &tproxyPacketWriter{ctx: ctx, source: natConn, destination: metadata.Destination} }) return nil } @@ -100,10 +100,7 @@ type tproxyPacketWriter struct { func (w *tproxyPacketWriter) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error { defer buffer.Release() - destination = destination.Unwrap() - if !w.destination.Addr.IsValid() { - w.destination = destination - } else if w.destination == destination && w.conn != nil { + if w.destination == destination && w.conn != nil { _, err := w.conn.WriteToUDPAddrPort(buffer.Bytes(), M.AddrPortFromNet(w.source.LocalAddr())) if err == nil { w.conn = nil diff --git a/route/rule_cidr.go b/route/rule_cidr.go index 988bfd7e..b72d1e10 100644 --- a/route/rule_cidr.go +++ b/route/rule_cidr.go @@ -59,13 +59,13 @@ func NewIPCIDRItem(isSource bool, prefixStrings []string) (*IPCIDRItem, error) { func (r *IPCIDRItem) Match(metadata *adapter.InboundContext) bool { if r.isSource { - return r.match(metadata.Source.Addr) + return r.ipSet.Contains(metadata.Source.Addr) } else { if metadata.Destination.IsIP() { - return r.match(metadata.Destination.Addr) + return r.ipSet.Contains(metadata.Destination.Addr) } else { for _, address := range metadata.DestinationAddresses { - if r.match(address) { + if r.ipSet.Contains(address) { return true } } @@ -74,14 +74,6 @@ func (r *IPCIDRItem) Match(metadata *adapter.InboundContext) bool { return false } -func (r *IPCIDRItem) match(address netip.Addr) bool { - if address.Is4In6() { - return r.ipSet.Contains(netip.AddrFrom4(address.As4())) - } else { - return r.ipSet.Contains(address) - } -} - func (r *IPCIDRItem) String() string { return r.description } diff --git a/transport/hysteria/protocol.go b/transport/hysteria/protocol.go index f7730dad..aa2eab30 100644 --- a/transport/hysteria/protocol.go +++ b/transport/hysteria/protocol.go @@ -462,7 +462,7 @@ func (c *PacketConn) ReadPacket(buffer *buf.Buffer) (destination M.Socksaddr, er return } err = common.Error(buffer.Write(msg.Data)) - destination = M.ParseSocksaddrHostPort(msg.Host, msg.Port) + destination = M.ParseSocksaddrHostPort(msg.Host, msg.Port).Unwrap() return } @@ -473,14 +473,14 @@ func (c *PacketConn) ReadPacketThreadSafe() (buffer *buf.Buffer, destination M.S return } buffer = buf.As(msg.Data) - destination = M.ParseSocksaddrHostPort(msg.Host, msg.Port) + destination = M.ParseSocksaddrHostPort(msg.Host, msg.Port).Unwrap() return } func (c *PacketConn) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error { return WriteUDPMessage(c.session, UDPMessage{ SessionID: c.sessionId, - Host: destination.Unwrap().AddrString(), + Host: destination.AddrString(), Port: destination.Port, FragCount: 1, Data: buffer.Bytes(),