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