import socket import struct def test_dns(server_ip, domain="google.com"): # Build simple DNS query packet # Transaction ID: 0x1234, Flags: 0x0100 (standard query, recursion desired) header = struct.pack(">HHHHHH", 0x1234, 0x0100, 1, 0, 0, 0) qname = b"".join(bytes([len(p)]) + p.encode("ascii") for p in domain.split(".")) + b"\x00" qtype_qclass = struct.pack(">HH", 1, 1) # A record, IN class packet = header + qname + qtype_qclass sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(3.0) try: sock.sendto(packet, (server_ip, 53)) resp, _ = sock.recvfrom(1024) print(f"SUCCESS: Received {len(resp)} bytes DNS response from {server_ip} for {domain}!") # Check answer count ancount = struct.unpack(">H", resp[6:8])[0] print(f"Answer count: {ancount}") except Exception as e: print(f"FAILED to query {server_ip}: {e}") finally: sock.close() test_dns("140.44.4.36", "google.com")