require 'resolv' require 'resolv-replace' def multiple_lookup(*names) dns = Resolv::DNS.new results = {} threads = [] names.each do |name| threads << Thread.new(name) do |name| begin dns.each_address(name) { |a| (results[name] ||= []) << a } rescue Resolv::ResolvError results[name] = nil end end end threads.each { |t| t.join } return results end domains = ("a".."z").collect { |l| l + '.com' } multiple_lookup(*domains).sort.each do |name, addresses| if addresses puts "#{name}: #{addresses.size} " + \ "address#{addresses.size == 1 ? "" : "es"}" end end