diff --git a/blockcheck.py b/blockcheck.py index 95a3c41..70fe718 100755 --- a/blockcheck.py +++ b/blockcheck.py @@ -12,6 +12,7 @@ import os.path import dns.resolver import dns.exception import ipaddress +import ipwhois ''' @@ -803,6 +804,18 @@ def check_ipv6_availability(): print(": IPv6 недоступен.") return False +def get_ispinfo(ipaddr): + try: + rdap_response = ipwhois.IPWhois(ipaddr) + ispinfo = rdap_response.lookup_rdap(depth=1) + return ispinfo['asn'] + except (ipwhois.exceptions.ASNRegistryError, + ipwhois.exceptions.ASNLookupError, + ipwhois.exceptions.ASNParseError, + ipwhois.exceptions.HTTPLookupError, + ipwhois.exceptions.HTTPRateLimitError): + return False + def main(): ipv6_addr = None global ipv6_available @@ -823,6 +836,12 @@ def main(): if ip_isp: if ipv6_available: print("IP: {}, IPv6: {}, провайдер: {}".format(_mask_ip(ip_isp[0]), _mask_ip(ipv6_addr), ip_isp[1])) + if not force_ipv6: + asn4 = get_ispinfo(ip_isp[0]) + asn6 = get_ispinfo(ipv6_addr) + if asn4 and asn6 and asn4 != asn6: + ipv6_available = False + print("Вероятно, у вас IPv6-туннель. Проверка IPv6 отключена.") else: print("IP: {}, провайдер: {}".format(_mask_ip(ip_isp[0]), ip_isp[1])) print() diff --git a/requirements.txt b/requirements.txt index 2f73596..655871c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ dnspython +ipwhois