Last active
May 5, 2025 13:33
-
-
Save Rafiot/305c63557b3bbaf0280d5b11243b8a44 to your computer and use it in GitHub Desktop.
Sync DNS resolution with dnspython and python_socks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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