box-o-sand/cookbook/014/04-list-a-to-z-domain-addrs-concurrent.rb

30 lines
702 B
Ruby
Raw Normal View History

2011-07-26 02:36:02 +00:00
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