class Mihari::DnsRecord

Public Class Methods

build_by_domain(domain) click to toggle source

Build DNS records

@param [String] domain

@return [Array<Mihari::DnsRecord>]

# File lib/mihari/models/dns.rb, line 18
def build_by_domain(domain)
  resource_types = [
    Resolv::DNS::Resource::IN::A,
    Resolv::DNS::Resource::IN::AAAA,
    Resolv::DNS::Resource::IN::CNAME,
    Resolv::DNS::Resource::IN::TXT,
    Resolv::DNS::Resource::IN::NS
  ]

  resource_types.map do |resource_type|
    get_values domain, resource_type
  rescue Resolv::ResolvError
    nil
  end.flatten.compact
end

Private Class Methods

get_values(domain, resource_type) click to toggle source
# File lib/mihari/models/dns.rb, line 36
def get_values(domain, resource_type)
  resources = Resolv::DNS.new.getresources(domain, resource_type)
  resource_name = resource_type.to_s.split("::").last

  resources.map do |resource|
    # A, AAAA
    if resource.respond_to?(:address)
      new(resource: resource_name, value: resource.address.to_s)
    # CNAME, NS
    elsif resource.respond_to?(:name)
      new(resource: resource_name, value: resource.name.to_s)
    # TXT
    elsif resource.respond_to?(:data)
      new(resource: resource_name, value: resource.data.to_s)
    end
  end.compact
end