Introduction
SimpleDNS is a very simple DNS server.
It was made to learn the basics of the DNS protocol.
Features:
- very small
- single-threaded
- all necessary data structures for further features
- very simplistic memory management
- no full protection against malformed requests :|
Build
git clone https://github.com/mwarning/SimpleDNS.git cd SimpleDNS cmake . make
Test
Start SimpleDNS:
$./sdns Listening on port 9000.
In another window execute dig:
$ dig @127.0.0.1 -p 9000 foo.bar.com ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @127.0.0.1 -p 9000 foo.bar.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15287 ;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;foo.bar.com. IN A ;; ANSWER SECTION: foo.bar.com. 0 IN A 192.168.1.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#9000(127.0.0.1) ;; WHEN: Mon Apr 15 00:50:38 2013 ;; MSG SIZE rcvd: 56
Recommended Reading
The DNS section of the TCP/IP-Guide was very helpful for understanding the protocol.