class Resolv

Resolv is a thread-aware DNS resolver library written in Ruby. Resolv can handle multiple DNS requests concurrently without blocking the entire Ruby interpreter.

See also resolv-replace.rb to replace the libc resolver with Resolv.

Resolv can look up various DNS resources using the DNS module directly.

Examples:

p Resolv.getaddress "www.ruby-lang.org"
p Resolv.getname "210.251.121.214"

Resolv::DNS.open do |dns|
  ress = dns.getresources "www.ruby-lang.org", Resolv::DNS::Resource::IN::A
  p ress.map(&:address)
  ress = dns.getresources "ruby-lang.org", Resolv::DNS::Resource::IN::MX
  p ress.map { |r| [r.exchange.to_s, r.preference] }
end

Bugs

Constants

AddressRegex

Address Regexp to use for matching IP addresses.

DefaultResolver

Default resolver to use for Resolv class methods.

WINDOWS

Tests whether we’re running on Windows

Public Class Methods

each_address(name, &block) click to toggle source

Iterates over all IP addresses for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 70
def self.each_address(name, &block)
  DefaultResolver.each_address(name, &block)
end
each_name(address, &proc) click to toggle source

Iterates over all hostnames for address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 91
def self.each_name(address, &proc)
  DefaultResolver.each_name(address, &proc)
end
getaddress(name) click to toggle source

Looks up the first IP address for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 56
def self.getaddress(name)
  DefaultResolver.getaddress(name)
end
getaddresses(name) click to toggle source

Looks up all IP address for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 63
def self.getaddresses(name)
  DefaultResolver.getaddresses(name)
end
getname(address) click to toggle source

Looks up the hostname of address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 77
def self.getname(address)
  DefaultResolver.getname(address)
end
getnames(address) click to toggle source

Looks up all hostnames for address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 84
def self.getnames(address)
  DefaultResolver.getnames(address)
end
new(resolvers=[Hosts.new, DNS.new]) click to toggle source

Creates a new Resolv using resolvers.

# File lib/logstash/filters/dns/resolv_9270.rb, line 98
def initialize(resolvers=[Hosts.new, DNS.new])
  @resolvers = resolvers
end

Public Instance Methods

each_address(name) { |name| ... } click to toggle source

Iterates over all IP addresses for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 122
def each_address(name)
  if AddressRegex =~ name
    yield name
    return
  end
  yielded = false
  @resolvers.each {|r|
    r.each_address(name) {|address|
      yield address.to_s
      yielded = true
    }
    return if yielded
  }
end
each_name(address) { |name| ... } click to toggle source

Iterates over all hostnames for address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 157
def each_name(address)
  yielded = false
  @resolvers.each {|r|
    r.each_name(address) {|name|
      yield name.to_s
      yielded = true
    }
    return if yielded
  }
end
getaddress(name) click to toggle source

Looks up the first IP address for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 105
def getaddress(name)
  each_address(name) {|address| return address}
  raise ResolvError.new("no address for #{name}")
end
getaddresses(name) click to toggle source

Looks up all IP address for name.

# File lib/logstash/filters/dns/resolv_9270.rb, line 113
def getaddresses(name)
  ret = []
  each_address(name) {|address| ret << address}
  return ret
end
getname(address) click to toggle source

Looks up the hostname of address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 140
def getname(address)
  each_name(address) {|name| return name}
  raise ResolvError.new("no name for #{address}")
end
getnames(address) click to toggle source

Looks up all hostnames for address.

# File lib/logstash/filters/dns/resolv_9270.rb, line 148
def getnames(address)
  ret = []
  each_name(address) {|name| ret << name}
  return ret
end