module DnsResources

Constants

IN
RESOURCE
RESOURCE_TYPES
VERSION

Public Class Methods

get_all_resources(host) click to toggle source
# File lib/dns_resources.rb, line 23
def self.get_all_resources(host)
  result = []
  resources = Resolv::DNS.new.getresources(host, IN::ANY)
  unless resources.empty?
    resources.each do |resource|
      result << get_resource_by_type(host, resource.class)
    end
  end
  result
end
get_resource_by_type(host, type) click to toggle source
# File lib/dns_resources.rb, line 34
def self.get_resource_by_type(host, type)
  resource_type = type.class.eql?(String) ? get_type_class(type) : type
  resource = Resolv::DNS.new.getresource(host, resource_type)
  values = get_resource_values(resource)
  { type: get_type(resource.class) }.merge(values)
end
get_resource_values(resource) click to toggle source
# File lib/dns_resources.rb, line 41
def self.get_resource_values(resource)
  return {} unless RESOURCE_TYPES.map { |v| v[:resource] }.include?(resource.class)
  case
  when resource.class.eql?(IN::A)
    { address: resource.address.to_s }
  when resource.class.eql?(IN::AAAA)
    { address: resource.address.to_s }
  when resource.class.eql?(IN::CNAME)
    { name: resource.name.to_s }
  when resource.class.eql?(RESOURCE::HINFO)
    { cpu: resource.cpu, os: resource.os }
  when resource.class.eql?(RESOURCE::MINFO)
    { emailbx: resource.emailbx, rmailbx: resource.rmailbx }
  when resource.class.eql?(RESOURCE::MX)
    { exchange: resource.exchange.to_s, preference: resource.preference }
  when resource.class.eql?(IN::NS)
    { name: resource.name.to_s }
  when resource.class.eql?(RESOURCE::PTR)
    { name: resource.name.to_s }
  when resource.class.eql?(RESOURCE::SOA)
    { mname: resource.mname.to_s, rname: resource.rname.to_s,
      refresh: resource.refresh, retry: resource.retry,
      expire: resource.expire, minimum: resource.minimum,
      serial: resource.serial }
  when resource.class.eql?(IN::SRV)
    { port: resource.port, priority: resource.priority,
      target: resource.target, weight: resource.weight }
  when resource.class.eql?(RESOURCE::TXT)
    { name: resource.strings }
  when resource.class.eql?(IN::WKS)
    { address: resource.address.to_s, bitmap: resource.bitmap, protocol: resource.protocol }
  else
    {}
  end
end
get_type(resource_class) click to toggle source
# File lib/dns_resources.rb, line 77
def self.get_type(resource_class)
  RESOURCE_TYPES.each do |v|
    return v[:type] if v[:resource].eql?(resource_class)
  end
end
get_type_class(type) click to toggle source
# File lib/dns_resources.rb, line 83
def self.get_type_class(type)
  RESOURCE_TYPES.each do |v|
    return v[:resource] if v[:type].eql?(type)
  end
end