From 683d03f16ab9aa4e8ae7d26283cc66628b87209e 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 5ed6ea8c6efb7..32752881b208c 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")