From 060ba86baa4ac585246e7948f40a0dbd5924da9d Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 27 Oct 2021 15:25:22 -0700 Subject: [PATCH] net/portmapper: ignore IGD SSDP responses from !defaultgw Now that we multicast the SSDP query, we can get IGD offers from devices other than the current device's default gateway. We don't want to accidentally bind ourselves to those. Updates #3197 Signed-off-by: David Anderson --- net/portmapper/portmapper.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/portmapper/portmapper.go b/net/portmapper/portmapper.go index 5ed6ea8c6..32752881b 100644 --- a/net/portmapper/portmapper.go +++ b/net/portmapper/portmapper.go @@ -752,10 +752,14 @@ func (c *Client) Probe(ctx context.Context) (res ProbeResult, err error) { } return res, err } + ip, ok := netaddr.FromStdIP(addr.(*net.UDPAddr).IP) + if !ok { + continue + } port := uint16(addr.(*net.UDPAddr).Port) switch port { case c.upnpPort(): - if mem.Contains(mem.B(buf[:n]), mem.S(":InternetGatewayDevice:")) { + if ip == gw && mem.Contains(mem.B(buf[:n]), mem.S(":InternetGatewayDevice:")) { meta, err := parseUPnPDiscoResponse(buf[:n]) if err != nil { c.logf("unrecognized UPnP discovery response; ignoring")