diff --git a/dns.scm b/dns.scm index a21eab2..5447e08 100644 --- a/dns.scm +++ b/dns.scm @@ -740,7 +740,22 @@ (display "sorry, no answers received\n")) dns-msg)) - +(define (dns-inverse-lookup ip) + (let* ((ip-string (ip-string->in-addr ip)) + (question (if ip-string ; if name is a ip-addr, the query is a in-addr.arpa address + (make-octet-query-message (random 256) ip-string 'ptr 'in) + (error "dns-inverse-lookup: no valid ip"))) + (use-cache? #t) + (nameserver (dns-find-nameserver)) + (check-answer (lambda (dns-msg) (if *debug* (display "check-answer\n")) + (let* ((reply (dns-message:reply dns-msg)) + (answers (message:answers reply))) + (not (null? answers))))) + (dns-msg (dns-get-information question use-cache? nameserver check-answer)) + (answers (message:answers (dns-message:reply dns-msg)))) + (if (not (null? answers)) + (rr-data-ptr:name (rr:data (car answers))) + #f))) diff --git a/modules.scm b/modules.scm index c81a2d4..6bd7b2b 100644 --- a/modules.scm +++ b/modules.scm @@ -735,6 +735,7 @@ (define-interface dns-interface (export dns-clear-cache dns-lookup + dns-inverse-lookup show-dns-message dns-find-nameserver))