/* DNS Fingerprint by Nexus */ /* Defines */ #define VERSION "1.0" #define BUFFER_SIZE 256 #ifndef _WIN32 #define INVALID_SOCKET (int)(~0) #define SOCKET_ERROR (-1) #endif /* Structures */ /* DNS Header Record, Little Endian - sorry you Big boys ;-) */ typedef struct { unsigned id:16; unsigned rd :1; unsigned tc :1; unsigned aa :1; unsigned opcode :4; unsigned qr :1; unsigned rcode :4; unsigned mbz:3; unsigned ra :1; unsigned qdcount:16; unsigned ancount:16; unsigned nscount:16; unsigned arcount:16; } DNS_HEADER; /* Constants */ /* Hard-coded requests as I'm a lazy bastard - and the Header ID is a giveaway ;-) */ char version[]= "\x4A\x4A\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x07\x76\x65\x72\x73\x69\x6F\x6E\x04\x62\x69\x6E" "\x64\x00\x00\x10\x00\x03"; char authors[]= "\x4A\x4A\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x07\x61\x75\x74\x68\x6F\x72\x73\x04\x62\x69\x6E" "\x64\x00\x00\x10\x00\x03"; char loopback[]= "\x4A\x4A\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x01\x31\x01\x30\x01\x30\x03\x31\x32\x37\x07\x69" "\x6E\x2D\x61\x64\x64\x72\x04\x61\x72\x70\x61\x00" "\x00\x0C\x00\x01"; char localhost[] = "\x4A\x4A\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x09\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x00\x00" "\x01\x00\x01"; const char *rcode_values[9] = { "No Error", "Packet Format Error", "Internal Server Error", "Name Error", "Request Not Implemented", "Request Refused", "Active Error", "Conflict Error", "Unknown" };