From d3327377463d19d5837c2ea2345dee62a75f8a87 Mon Sep 17 00:00:00 2001 From: Jeff Terrace Date: Sat, 21 Dec 2024 17:49:10 -0500 Subject: [PATCH] Filter APIPA address range when finding IP addresses. --- wsdiscovery/util.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wsdiscovery/util.py b/wsdiscovery/util.py index 254edf9..3269568 100644 --- a/wsdiscovery/util.py +++ b/wsdiscovery/util.py @@ -16,6 +16,8 @@ logger = logging.getLogger("util") +_APIPA_RANGE = ipaddress.ip_network("169.254.0.0/16") + def createSkelSoapMessage(soapAction): doc = minidom.Document() @@ -259,14 +261,14 @@ def _getNetworkAddrs(protocol_version): for ip in iface.ips: if isinstance(ip.ip, str): ip_address = ipaddress.ip_address(ip.ip) - if not ip_address.is_loopback: + if not ip_address.is_loopback and ip_address not in _APIPA_RANGE: addrs.append(ip_address) elif protocol_version == socket.AF_INET6: for iface in ifaces: for ip in iface.ips: if isinstance(ip.ip, tuple): ip_address = ipaddress.ip_address(f"{ip.ip[0]}%{ip.ip[2]}") - if not ip_address.is_loopback: + if not ip_address.is_loopback and ip_address not in _APIPA_RANGE: addrs.append(ip_address) else: logger.warning(f"requested protocol version ({protocol_version}) is not"