DNS Resolver
A DNS resolver in Go to understand DNS below the standard library level. It manually constructs DNS packets, sends them over UDP, parses the binary response, and supports iterative resolution through the DNS hierarchy.
Problem
DNS is the distributed naming system that maps domain names to IP addresses so clients can locate servers on the network.
Prior Art
git-flow exists but it's heavyweight and opinionated about the full branching model. Commitizen handles commit messages but not branching. Nothing handled the full workflow from branch creation to release in a lightweight way.
Design Decisions
I separated the project into encoding, transport, decoding, and resolver layers to keep the DNS workflow modular and easier to debug. I also implemented reusable parsing functions for resource records to reduce duplication and keep the protocol handling consistent.
Architecture
The architecture is organized around the DNS resolution pipeline: packet encoding, UDP communication, packet decoding, and resolver orchestration. The CLI layer handles user input and presentation, while the internal DNS package contains the protocol and resolution logic.
Reflection
This project helped me understand DNS far beyond simple library lookups. The most valuable lessons came from working directly with binary packet structures, compression pointers, iterative referrals, and resolver behavior.