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



526
527
528
# File 'lib/dnsruby.rb', line 526

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



506
507
508
# File 'lib/dnsruby.rb', line 506

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

.each_name(address, &proc) ⇒ Object

Iterates over all hostnames of address



521
522
523
# File 'lib/dnsruby.rb', line 521

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

.getaddress(name) ⇒ Object

Looks up the first IP address for name



496
497
498
# File 'lib/dnsruby.rb', line 496

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

.getaddresses(name) ⇒ Object

Looks up all IP addresses for name



501
502
503
# File 'lib/dnsruby.rb', line 501

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

.getname(address) ⇒ Object

Looks up the first hostname of address



511
512
513
# File 'lib/dnsruby.rb', line 511

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

.getnames(address) ⇒ Object

Looks up all hostnames of address



516
517
518
# File 'lib/dnsruby.rb', line 516

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

Instance Method Details

#each_address(name) ⇒ Object

Iterates over all IP addresses for name



544
545
546
547
548
549
550
551
552
553
554
555
556
557
# File 'lib/dnsruby.rb', line 544

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



573
574
575
576
577
578
579
580
581
582
# File 'lib/dnsruby.rb', line 573

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:



531
532
533
534
# File 'lib/dnsruby.rb', line 531

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



537
538
539
540
541
# File 'lib/dnsruby.rb', line 537

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

#getname(address) ⇒ Object

Looks up the first hostname of address

Raises:



560
561
562
563
# File 'lib/dnsruby.rb', line 560

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



566
567
568
569
570
# File 'lib/dnsruby.rb', line 566

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