tvl-depot/lisp/dns/resolver.lisp
Vincent Ambo e50c362244 feat(lisp/dns): Check in very early DNS-over-HTTPS client
This includes very barebones support for querying TXT and MX records
right now. The returned structure is not turned into a more convenient
format and error handling is, well, NIL.
2020-01-22 18:04:26 +00:00

29 lines
994 B
Common Lisp

;; Initial implementation is a simple client for
;; https://developers.google.com/speed/public-dns/docs/doh/json
(defpackage #:dns
(:documentation "Simple DNS resolver in Common Lisp")
(:use #:cl)
(:export #:lookup-txt #:lookup-mx))
(defvar *doh-base-url* "https://dns.google/resolve"
"Base URL of the service providing DNS-over-HTTP(S). Defaults to the
Google-hosted API.")
(defun lookup-generic (name type)
(multiple-value-bind (body)
(drakma:http-request *doh-base-url*
:decode-content t
:want-stream t
:parameters `(("type" . ,type)
("name" . ,name)
("ct" . "application/x-javascript")))
(cl-json:decode-json body)))
(defun lookup-txt (name)
"Look up the TXT records at NAME."
(lookup-generic name "TXT"))
(defun lookup-mx (name)
"Look up the MX records at NAME."
(lookup-generic name "MX"))