Implement DNS in a weekend in common lisp

I had some time on my hand during a weekend and I have never built a DNS resolver before, so here is my version of implementing DNS in a weekend. This is a fun project because it’s small in scope, yet the problem space is non-trivial. The main objective for me here was to learn more about the current state of common lisp and how to use its binary manipulation and networking capabilities.

Goals

  • Learn more about Common Lisp’s socket implementation
  • Learn more about Common Lisp’s capabilities to parse binary data
  • Understand in detail what a DNS resolver does

Non-Goals

  • Implement a full DNS resolver

Decisions

  • Provide an API for IP resolution and
  • Provide an API to issue arbitrary DNS queries and display the result similar to the dig command

Example

query-screenshot