class Checker

Attributes

ip[RW]

Public Class Methods

new(to_check) click to toggle source
# File lib/checker.rb, line 19
def initialize(to_check)
  @ip = resolve_to_ip(to_check)
end

Public Instance Methods

check() { |{ rbl: rbl_domain, ttl: ttl, result: rbl_response_code, message: rbl_txt_message }| ... } click to toggle source
# File lib/checker.rb, line 36
def check(&blk)
  rbls.each do |line|
    rbl_domain = line.strip
    name = name_to_lookup rbl_domain

    answer = resolver.query(name).answer
    if answer.length > 0
      rbl_response_code = answer.first.address
      text = resolver.query(name, Net::DNS::TXT).answer
      rbl_txt_message = text.first.nil? ? "" : text.first.txt
      ttl = text.first.nil? ? 0 : text.first.ttl

      yield({ rbl: rbl_domain, ttl: ttl, result: rbl_response_code, message: rbl_txt_message })
    else
      yield({ rbl: rbl_domain, ttl: ttl, result: "", message: 'Not Listed' })
    end
  end
end
name_to_lookup(rbl_domain) click to toggle source
# File lib/checker.rb, line 59
def name_to_lookup(rbl_domain)
  ip.reverse.gsub(/in-addr.arpa/, rbl_domain)
end
rbls() click to toggle source
# File lib/checker.rb, line 55
def rbls
  @@rbls ||= RBL::Loader.load
end
resolve_to_ip(name_to_lookup) click to toggle source
# File lib/checker.rb, line 23
def resolve_to_ip name_to_lookup
  begin
    IPAddr.new(name_to_lookup)
  rescue ArgumentError => e
    answer = Resolver(name_to_lookup).answer
    if answer.empty?
      raise NotFound.new(name_to_lookup)
    else
      answer.first.address
    end
  end
end
resolver() click to toggle source
# File lib/checker.rb, line 63
def resolver
  @resolver ||= Net::DNS::Resolver.new(:nameservers => ['8.8.8.8','8.8.4.4'] * 10, :log_file => nil)
end