32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
import socket
|
|
import sys
|
|
|
|
def make_query(name):
|
|
import random
|
|
txid = random.randint(1, 65535)
|
|
header = txid.to_bytes(2, 'big') + (0x0100).to_bytes(2, 'big') + (1).to_bytes(2, 'big') + b'\x00\x00\x00\x00\x00\x00'
|
|
qname = b''.join([bytes([len(p)]) + p.encode('ascii') for p in name.split('.')]) + b'\x00'
|
|
return header + qname + (1).to_bytes(2, 'big') + (1).to_bytes(2, 'big')
|
|
|
|
def query_ip(server, domain):
|
|
packet = make_query(domain)
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
s.settimeout(2.0)
|
|
try:
|
|
s.sendto(packet, (server, 53))
|
|
data, _ = s.recvfrom(1024)
|
|
# Parse answer IP (last 4 bytes of first A record)
|
|
if len(data) >= 16:
|
|
ip = f"{data[-4]}.{data[-3]}.{data[-2]}.{data[-1]}"
|
|
return ip
|
|
except Exception as e:
|
|
return str(e)
|
|
finally:
|
|
s.close()
|
|
|
|
for server in ["140.44.4.36", "140.44.4.65"]:
|
|
for dom in ["pihole1.snarfnet.net", "pihole2.snarfnet.net", "dns1.snarfnet.net", "dns2.snarfnet.net", "ns1.snarfnet.net", "ns2.snarfnet.net"]:
|
|
ip = query_ip(server, dom)
|
|
print(f"[{server}] {dom:<25} -> {ip}")
|
|
|