#lang racket (require net/url) (define records (map (lambda (r) (string-split r "\t")) (string-split (port->string (get-pure-port (string->url "http://www.internic.net/domain/root.zone"))) "\n"))) (define (split-host-str s) (map string->bytes/utf-8 (string-split s "."))) (define (split-ip-str s) (list->vector (map string->number (string-split s ".")))) (pretty-write `(list ,@(filter values (for/list [(r records)] (match r [(list "." "" "" ttl-str "IN" "NS" (regexp #px"^(.+)\\.$" (list _ host-str))) `(NS/ttl '() ',(split-host-str host-str) ,(string->number ttl-str))] [(list (regexp #px"^([^.]+\\.root-servers\\.net)\\.$" (list _ host-str)) ttl-str "IN" "A" ip-str) `(A/ttl ',(split-host-str host-str) ',(split-ip-str ip-str) ,(string->number ttl-str))] [_ #f])))))