class SiteInspector::Endpoint::Dns
Public Class Methods
resolver()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 8 def self.resolver require 'dnsruby' @resolver ||= begin resolver = Dnsruby::Resolver.new resolver.config.nameserver = ['8.8.8.8', '8.8.4.4'] resolver end end
Public Instance Methods
cdn()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 40 def cdn detect_by_hostname 'cdn' end
cdn?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 44 def cdn? !!cdn end
cloud?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 52 def cloud? !!cloud_provider end
cloud_provider()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 48 def cloud_provider detect_by_hostname 'cloud' end
cnames()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 79 def cnames @cnames ||= records.select { |record| record.type == 'CNAME' }.map do |record| PublicSuffix.parse(record.cname.to_s) end end
dnssec?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 32 def dnssec? @dnssec ||= has_record? 'DNSKEY' end
google_apps?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 56 def google_apps? @google_apps ||= records.any? do |record| record.type == 'MX' && record.exchange.to_s =~ /google(mail)?\.com\.?\z/i end end
hostname()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 72 def hostname require 'resolv' @hostname ||= PublicSuffix.parse(Resolv.getname(ip)) rescue Resolv::ResolvError, PublicSuffix::DomainInvalid nil end
inspect()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 85 def inspect "#<SiteInspector::Domain::Dns host=\"#{host}\">" end
ip()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 66 def ip @ip ||= Resolv.getaddress host rescue Resolv::ResolvError nil end
ipv6?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 36 def ipv6? @ipv6 ||= has_record? 'AAAA' end
localhost?()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 62 def localhost? ip == '127.0.0.1' end
query(type = 'ANY')
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 17 def query(type = 'ANY') SiteInspector::Endpoint::Dns.resolver.query(host.to_s, type).answer rescue Dnsruby::ResolvTimeout, Dnsruby::ServFail, Dnsruby::NXDomain [] end
record?(type)
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 27 def record?(type) records.any? { |record| record.type == type } || query(type).count != 0 end
Also aliased as: has_record?
records()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 23 def records @records ||= query end
to_h()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 89 def to_h return { error: LocalhostError } if localhost? { dnssec: dnssec?, ipv6: ipv6?, cdn: cdn, cloud_provider: cloud_provider, google_apps: google_apps?, hostname: hostname, ip: ip } end
Private Instance Methods
data()
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 105 def data @data ||= {} end
data_path(name)
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 109 def data_path(name) File.expand_path "../../data/#{name}.yml", File.dirname(__FILE__) end
detect_by_hostname(type)
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 119 def detect_by_hostname(type) haystack = load_data(type) needle = haystack.find do |_name, domain| cnames.any? do |cname| [cname.tld, "#{cname.sld}.#{cname.tld}"].include? domain end end return needle[0].to_sym if needle return nil unless hostname needle = haystack.find do |_name, domain| [hostname.tld, "#{hostname.sld}.#{hostname.tld}"].include? domain end needle ? needle[0].to_sym : nil end
load_data(name)
click to toggle source
# File lib/site-inspector/checks/dns.rb, line 113 def load_data(name) require 'yaml' path = data_path(name) data[name] ||= YAML.load_file(path) end