surrogate-1 / bin /lib /dns_fallback.py
Ashira Pitchayapakayakul
feat: migrate $HOME/.claude/* to $HOME/.surrogate/* (clean separation from Claude Code)
e36381e
# 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