/SimpleDNS

A very simple and small DNS Server to help understanding the protocol basics.

Primary LanguageC

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.