This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Performing DNS Queries | ||
---|---|---|
Code | Expected | Actual |
require 'resolv' Resolv::DNS.new.each_address("oreilly.com") { |addr| puts addr } |
208.201.239.36 208.201.239.37 |
208.201.239.36 208.201.239.37 |
dns = Resolv::DNS.new domain = "oreilly.com" dns.each_resource(domain, Resolv::DNS::Resource::IN::MX) do |mail_server| puts mail_server.exchange end |
smtp1.oreilly.com smtp2.oreilly.com |
smtp1.oreilly.com smtp2.oreilly.com |
dns.each_resource(domain, Resolv::DNS::Resource::IN::NS) do |nameserver| puts nameserver.name end |
a.auth-ns.sonic.net b.auth-ns.sonic.net c.auth-ns.sonic.net ns.oreilly.com |
ns.oreilly.com a.auth-ns.sonic.net b.auth-ns.sonic.net c.auth-ns.sonic.net |
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).each do |name, addresses| if addresses puts "#{name}: #{addresses.size} address#{addresses.size == 1 ? "" : "es"}" end end |
x.com: 4 addresses z.com: 1 address q.com: 1 address |
x.com: 4 addresses z.com: 1 address q.com: 1 address |