class Netchk::DNSServerVerifier

Public Class Methods

new(**options) click to toggle source
# File lib/netchk/dns_server_verifier.rb, line 8
def initialize(**options)
  @resolve_conf = options['resolv.conf']
end

Public Instance Methods

verify() click to toggle source
# File lib/netchk/dns_server_verifier.rb, line 12
def verify
  nameservers = self.nameservers
  if nameservers.empty?
    $stderr.puts 'No DNS server found. Verify your configuration.'
  else
    puts "Using DNS servers #{nameservers.map { |ns| ns.join('#') }.join(', ')}"
    nameservers.map do |ns|
      verify_nameserver(*ns)
    end
  end
end

Private Instance Methods

nameservers() click to toggle source
# File lib/netchk/dns_server_verifier.rb, line 32
def nameservers
  # Dirty trick to get default nameserver list from /etc/resolv.conf
  # without parsing the file manually.
  ::Resolv::DNS.open(@resolve_conf) do |dns|
    dns.lazy_initialize
    dns.instance_variable_get('@config').instance_variable_get('@nameserver_port')
  end
end
verify_nameserver(ip, port) click to toggle source
# File lib/netchk/dns_server_verifier.rb, line 25
def verify_nameserver(ip, port)
  ping = Net::Ping::TCP.new(ip, port)
  unless ping.ping?
    $stderr.puts "Failed to ping DNS server #{ip}##{port}"
  end
end