From 5ac9d17bdf2881179960ff9b3e03a80ab0f31422 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 4 Oct 2024 14:40:57 +0700 Subject: [PATCH] cmd/cli: simplify queryFromSelf By using netmon.LocalAddresses instead of looping through interfaces list manually. --- cmd/cli/dns_proxy.go | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/cmd/cli/dns_proxy.go b/cmd/cli/dns_proxy.go index 242864f..0da0b1d 100644 --- a/cmd/cli/dns_proxy.go +++ b/cmd/cli/dns_proxy.go @@ -9,6 +9,7 @@ import ( "net" "net/netip" "runtime" + "slices" "strconv" "strings" "sync" @@ -16,7 +17,6 @@ import ( "github.com/miekg/dns" "golang.org/x/sync/errgroup" - "tailscale.com/net/netaddr" "tailscale.com/net/netmon" "tailscale.com/net/tsaddr" @@ -968,25 +968,15 @@ func (p *prog) queryFromSelf(ip string) bool { return val.(bool) } netIP := netip.MustParseAddr(ip) - ifaces, err := netmon.GetInterfaceList() + regularIPs, loopbackIPs, err := netmon.LocalAddresses() if err != nil { - mainLog.Load().Warn().Err(err).Msg("could not get interfaces list") + mainLog.Load().Warn().Err(err).Msg("could not get local addresses") return false } - for _, iface := range ifaces { - addrs, err := iface.Addrs() - if err != nil { - mainLog.Load().Warn().Err(err).Msgf("could not get interfaces addresses: %s", iface.Name) - continue - } - for _, a := range addrs { - switch v := a.(type) { - case *net.IPNet: - if pfx, ok := netaddr.FromStdIPNet(v); ok && pfx.Addr().Compare(netIP) == 0 { - p.queryFromSelfMap.Store(ip, true) - return true - } - } + for _, localIP := range slices.Concat(regularIPs, loopbackIPs) { + if localIP.Compare(netIP) == 0 { + p.queryFromSelfMap.Store(ip, true) + return true } } p.queryFromSelfMap.Store(ip, false)