Class: SiteInspector::Endpoint::Dns

Inherits:
Check
  • Object
show all
Defined in:
lib/site-inspector/checks/dns.rb

Defined Under Namespace

Classes: LocalhostError

Instance Attribute Summary

Attributes inherited from Check

#endpoint

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Check

enabled=, enabled?, #host, #initialize, #name, name, #request, #response

Constructor Details

This class inherits a constructor from SiteInspector::Endpoint::Check

Class Method Details

.resolverObject



8
9
10
11
12
13
14
15
# 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

Instance Method Details

#cdnObject



40
41
42
# File 'lib/site-inspector/checks/dns.rb', line 40

def cdn
  detect_by_hostname 'cdn'
end

#cdn?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/site-inspector/checks/dns.rb', line 44

def cdn?
  !!cdn
end

#cloud?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/site-inspector/checks/dns.rb', line 52

def cloud?
  !!cloud_provider
end

#cloud_providerObject



48
49
50
# File 'lib/site-inspector/checks/dns.rb', line 48

def cloud_provider
  detect_by_hostname 'cloud'
end

#cnamesObject



79
80
81
82
83
# 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?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/site-inspector/checks/dns.rb', line 32

def dnssec?
  @dnssec ||= has_record? 'DNSKEY'
end

#google_apps?Boolean

Returns:

  • (Boolean)


56
57
58
59
60
# 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

#hostnameObject



72
73
74
75
76
77
# 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

#inspectObject



85
86
87
# File 'lib/site-inspector/checks/dns.rb', line 85

def inspect
  "#<SiteInspector::Domain::Dns host=\"#{host}\">"
end

#ipObject



66
67
68
69
70
# File 'lib/site-inspector/checks/dns.rb', line 66

def ip
  @ip ||= Resolv.getaddress host
rescue Resolv::ResolvError
  nil
end

#ipv6?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/site-inspector/checks/dns.rb', line 36

def ipv6?
  @ipv6 ||= has_record? 'AAAA'
end

#localhost?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/site-inspector/checks/dns.rb', line 62

def localhost?
  ip == '127.0.0.1'
end

#query(type = 'ANY') ⇒ Object



17
18
19
20
21
# 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) ⇒ Boolean Also known as: has_record?

Returns:

  • (Boolean)


27
28
29
# File 'lib/site-inspector/checks/dns.rb', line 27

def record?(type)
  records.any? { |record| record.type == type } || query(type).count != 0
end

#recordsObject



23
24
25
# File 'lib/site-inspector/checks/dns.rb', line 23

def records
  @records ||= query
end

#to_hObject



89
90
91
92
93
94
95
96
97
98
99
100
101
# 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