Class: Dnsruby::Resolv

Inherits:
Object
  • Object
show all
Defined in:
lib/dnsruby.rb

Overview

The Resolv class can be used to resolve addresses using /etc/hosts and /etc/resolv.conf,

The DNS class may be used to perform more queries. If greater control over the sending of packets is required, then the Resolver or SingleResolver classes may be used.

Constant Summary collapse

DefaultResolver =

Default Resolver to use for Dnsruby class methods

self.new
AddressRegex =

Address RegExp to use for matching IP addresses

/(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resolvers = [Hosts.new, DNS.new]) ⇒ Resolv

Creates a new Resolv using resolvers



523
524
525
# File 'lib/dnsruby.rb', line 523

def initialize(resolvers=[Hosts.new, DNS.new])
  @resolvers = resolvers
end

Class Method Details

.each_address(name, &block) ⇒ Object

Iterates over all IP addresses for name



503
504
505
# File 'lib/dnsruby.rb', line 503

def self.each_address(name, &block)
  DefaultResolver.each_address(name, &block)
end

.each_name(address, &proc) ⇒ Object

Iterates over all hostnames of address



518
519
520
# File 'lib/dnsruby.rb', line 518

def self.each_name(address, &proc)
  DefaultResolver.each_name(address, &proc)
end

.getaddress(name) ⇒ Object

Looks up the first IP address for name



493
494
495
# File 'lib/dnsruby.rb', line 493

def self.getaddress(name)
  DefaultResolver.getaddress(name)
end

.getaddresses(name) ⇒ Object

Looks up all IP addresses for name



498
499
500
# File 'lib/dnsruby.rb', line 498

def self.getaddresses(name)
  DefaultResolver.getaddresses(name)
end

.getname(address) ⇒ Object

Looks up the first hostname of address



508
509
510
# File 'lib/dnsruby.rb', line 508

def self.getname(address)
  DefaultResolver.getname(address)
end

.getnames(address) ⇒ Object

Looks up all hostnames of address



513
514
515
# File 'lib/dnsruby.rb', line 513

def self.getnames(address)
  DefaultResolver.getnames(address)
end

Instance Method Details

#each_address(name) ⇒ Object

Iterates over all IP addresses for name



541
542
543
544
545
546
547
548
549
550
551
552
553
554
# File 'lib/dnsruby.rb', line 541

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) ⇒ Object

Iterates over all hostnames of address



570
571
572
573
574
575
576
577
578
579
# File 'lib/dnsruby.rb', line 570

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) ⇒ Object

Looks up the first IP address for name

Raises:



528
529
530
531
# File 'lib/dnsruby.rb', line 528

def getaddress(name)
  each_address(name) {|address| return address}
  raise ResolvError.new("no address for #{name}")
end

#getaddresses(name) ⇒ Object

Looks up all IP addresses for name



534
535
536
537
538
# File 'lib/dnsruby.rb', line 534

def getaddresses(name)
  ret = []
  each_address(name) {|address| ret << address}
  return ret
end

#getname(address) ⇒ Object

Looks up the first hostname of address

Raises:



557
558
559
560
# File 'lib/dnsruby.rb', line 557

def getname(address)
  each_name(address) {|name| return name}
  raise ResolvError.new("no name for #{address}")
end

#getnames(address) ⇒ Object

Looks up all hostnames of address



563
564
565
566
567
# File 'lib/dnsruby.rb', line 563

def getnames(address)
  ret = []
  each_name(address) {|name| ret << name}
  return ret
end