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



6
7
8
9
10
11
12
13
# File 'lib/site-inspector/checks/dns.rb', line 6

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



38
39
40
# File 'lib/site-inspector/checks/dns.rb', line 38

def cdn
  detect_by_hostname 'cdn'
end

#cdn?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/site-inspector/checks/dns.rb', line 42

def cdn?
  !!cdn
end

#cloud?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/site-inspector/checks/dns.rb', line 50

def cloud?
  !!cloud_provider
end

#cloud_providerObject



46
47
48
# File 'lib/site-inspector/checks/dns.rb', line 46

def cloud_provider
  detect_by_hostname 'cloud'
end

#cnamesObject



78
79
80
81
82
# File 'lib/site-inspector/checks/dns.rb', line 78

def cnames
  @cnames ||= records.select { |record| record.type == 'CNAME' }.map do |record|
    PublicSuffix.parse(record.cname.to_s)
  end
end

#dnssec?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/site-inspector/checks/dns.rb', line 30

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

#google_apps?Boolean

Returns:

  • (Boolean)


54
55
56
57
58
# File 'lib/site-inspector/checks/dns.rb', line 54

def google_apps?
  @google ||= records.any? do |record|
    record.type == 'MX' && record.exchange.to_s =~ /google(mail)?\.com\.?\z/i
  end
end

#hostnameObject



71
72
73
74
75
76
# File 'lib/site-inspector/checks/dns.rb', line 71

def hostname
  require 'resolv'
  @hostname ||= PublicSuffix.parse(Resolv.getname(ip))
rescue Resolv::ResolvError, PublicSuffix::DomainInvalid
  nil
end

#inspectObject



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

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

#ipObject



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

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

#ipv6?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/site-inspector/checks/dns.rb', line 34

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

#localhost?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/site-inspector/checks/dns.rb', line 60

def localhost?
  ip == '127.0.0.1'
end

#query(type = 'ANY') ⇒ Object



15
16
17
18
19
# File 'lib/site-inspector/checks/dns.rb', line 15

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)


25
26
27
# File 'lib/site-inspector/checks/dns.rb', line 25

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

#recordsObject



21
22
23
# File 'lib/site-inspector/checks/dns.rb', line 21

def records
  @records ||= query
end

#to_hObject



88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/site-inspector/checks/dns.rb', line 88

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