Sam Trenholme of MaraDNS fame has updated his "world's smallest useful DNS server". It is so small, that the code fits right here:

/*Placed in the public domain by Sam Trenholme*/
    #include <arpa/inet.h>
    #include <string.h>
    #include <stdint.h>
    #define Z struct sockaddr
    #define Y sizeof(d)
    int main(int a,char **b){uint32_t i;char q[512]
    ,p[17]="\xc0\f\0\x01\0\x01\0\0\0\0\0\x04";if(a>
    1){struct sockaddr_in d;socklen_t f=511;bzero(&
    d,Y);a=socket(AF_INET,SOCK_DGRAM,0);*((uint32_t
    *)(p+12))=inet_addr(b[1]);d.sin_family=AF_INET;
    d.sin_port=htons(53);bind(a,(Z*)&d,Y);for(;;){i
    =recvfrom(a,q,255,0,(Z*)&d,&f);if(i>9&&q[2]>=0)
    {q[2]|=128;q[11]?q[3]|=4:1;q[7]++;memcpy(q+i,p,
    16);sendto(a,q,i+16,0,(Z*)&d,Y);}}}return 0;}

Compile it (cc nanodns.c) and run it (./a.out 1.2.3.4) as root. It binds to all the machine's interfaces and returns the IP specified on the command line as an A resource record to any query it gets. The code is a little obfuscated, but it works.

Flattr this
DNS and CLI :: 05 Aug 2010 :: e-mail

Comments

blog comments powered by Disqus