File size: 1,083 Bytes
e36381e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# DNS fallback helper β€” patches socket.getaddrinfo to use dig @8.8.8.8
# when system resolver fails (ISP DNS filtering certain AI endpoints).
# Import at top of any Python script: exec(open(...).read())
import socket as _sock
import subprocess as _sp

_orig_getaddrinfo = _sock.getaddrinfo

def _resilient_getaddrinfo(host, *args, **kwargs):
    try:
        return _orig_getaddrinfo(host, *args, **kwargs)
    except _sock.gaierror:
        # Fall back: resolve via public DNS (bypass ISP filtering)
        for resolver in ("1.1.1.1", "8.8.8.8", "9.9.9.9"):
            try:
                out = _sp.check_output(
                    ["dig", "+short", "+time=3", "+tries=1", f"@{resolver}", host],
                    text=True, timeout=5, stderr=_sp.DEVNULL
                ).strip().splitlines()
                ip = next((ln for ln in out if ln and ln[0].isdigit()), None)
                if ip:
                    return _orig_getaddrinfo(ip, *args, **kwargs)
            except Exception:
                continue
        raise

_sock.getaddrinfo = _resilient_getaddrinfo