Dnsruby is a thread-aware DNS stub resolver library written in Ruby.
It is based on resolv.rb, the standard Ruby DNS implementation, but gives a complete DNS implementation complying with all relevant RFCs.
The Resolv class can be used to resolve addresses using /etc/hosts and /etc/resolv.conf, or the DNS class can be used to make DNS queries. These interfaces will attempt to apply the default domain and searchlist when resolving names.
The Resolver and SingleResolver interfaces allow finer control of individual messages. The Resolver class sends queries to multiple resolvers using various retry mechanisms. The SingleResolver class is used by Resolver to send individual Messages to individual resolvers.
Resolver queries return Dnsruby::Message objects. Message objects have five sections:
p Dnsruby::Resolv.getaddress("www.ruby-lang.org")
p Dnsruby::Resolv.getname("210.251.121.214")
Dnsruby::DNS.open {|dns|
p dns.getresources("www.ruby-lang.org", Dnsruby::Types.A).collect {|r| r.address}
p dns.getresources("ruby-lang.org", 'MX').collect {|r| [r.exchange.to_s, r.preference]}
}
Dnsruby implements a pure Ruby event loop to perform I/O. Dnsruby can also use EventMachine to perform I/O, if it is available on the platform - but it must be enabled through the Dnsruby::Resolver class