diff --git a/proxy.py b/proxy.py index 0db8336..7d32907 100644 --- a/proxy.py +++ b/proxy.py @@ -14,6 +14,7 @@ domain = sys.argv[1] port = int(sys.argv[2]) ttl = 120 timeout = 2 +ipv6_ula_network = ipaddress.ip_network('fc00::/7') class DynamicResolver(object): def __init__(self): @@ -91,14 +92,16 @@ class DynamicResolver(object): )) for addr in info.ip_addresses_by_version(IPVersion.V4Only)] additional += [dns.RRHeader(name=target, ttl=ttl, type=dns.AAAA, payload=dns.Record_AAAA( str(addr) - )) for addr in info.ip_addresses_by_version(IPVersion.V6Only) if not addr.is_link_local] + )) for addr in info.ip_addresses_by_version(IPVersion.V6Only) if addr in ipv6_ula_network] return answers, [], additional def host(localname, qtype): if qtype == dns.AAAA: mdns_type, addr_len, parse_addr = _TYPE_AAAA, 16, ipaddress.IPv6Address + keep_addr = lambda addr: addr in ipv6_ula_network else: mdns_type, addr_len, parse_addr = _TYPE_A, 4, ipaddress.IPv4Address + keep_addr = lambda addr: not addr.is_link_local class listener(RecordUpdateListener): def __init__(self): @@ -107,7 +110,7 @@ class DynamicResolver(object): def update_record(self, zc, now, record): if record.type == mdns_type and len(record.address) == addr_len: addr = parse_addr(record.address) - if not addr.is_link_local: + if keep_addr(addr): self.addrs.append(str(addr)) l = listener()