clojure-adventure added by certainty on Wed May 22 09:12:45 2013
(ns policyj.rbl (use [clojure.string :only (split join)]) (import java.net.InetAddress java.net.Inet4Address java.net.Inet6Address)) (defn- dns-resolvable? [domain] "Tries to resolve the domain passed to the function and returns true if it can resolve it and false otherwise" (try (not (empty? (InetAddress/getAllByName domain))) (catch Exception exn false))) (defn- reverse-dotted-quad [ip] "127.0.0.1 -> 1.0.0.127" (join "." (reverse (split ip #"\.")))) (defn- rbl-domain [ip service] "[127.0.0.1 rbl.test.org] -> 1.0.0.127.rbl.test.org" (join "." (list (reverse-dotted-quad ip) service))) (def rbl-check [ip services] "Performs an rbl check of the ip on the given services. It returns the first service on which it resolved or nil if non resolved " (first (filter #(dns-resolvable? (rbl-domain ip %))) services))