Skip to content

Instantly share code, notes, and snippets.

@Rafiot
Last active May 5, 2025 13:33
Show Gist options
  • Select an option

  • Save Rafiot/305c63557b3bbaf0280d5b11243b8a44 to your computer and use it in GitHub Desktop.

Select an option

Save Rafiot/305c63557b3bbaf0280d5b11243b8a44 to your computer and use it in GitHub Desktop.
Sync DNS resolution with dnspython and python_socks
#!/usr/bin/env python3
from dns import nameserver, message, query, rdatatype
from dns.resolver import Resolver
from python_socks.sync import Proxy
class Socks5Do53Nameserver(nameserver.Do53Nameserver):
def query(
self,
request: message.QueryMessage,
timeout: float,
source: str | None,
source_port: int,
max_size: bool,
one_rr_per_rrset: bool = False,
ignore_trailing: bool = False,
) -> message.Message:
proxy = Proxy.from_url('socks5://127.0.0.1:25345')
sock = proxy.connect(dest_host=self.address, dest_port=self.port)
return query.tcp(
request,
self.address,
timeout=timeout,
port=self.port,
source=source,
source_port=source_port,
one_rr_per_rrset=one_rr_per_rrset,
ignore_trailing=ignore_trailing,
sock=sock
)
r = Resolver(configure=False)
r.nameservers = [Socks5Do53Nameserver('10.2.0.1')] # 'https://cloudflare-dns.com/dns-query', '10.2.0.1']
response = r.resolve('google.nl', rdatatype.RdataType.A, tcp=True)
print('Sync python_socks:', response.response.answer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment