class Puffy::Resolver
DNS resolution class.
Public Instance Methods
resolv(hostname, address_family = nil)
click to toggle source
Resolve hostname
and return an Array
of IPAddr.
@example
Resolver.instance.resolv('localhost') #=> [#<IPAddr:[::1]>, #<IPAddr:127.0.0.1>] Resolver.instance.resolv('localhost', :inet) #=> [#<IPAddr:127.0.0.1>] Resolver.instance.resolv('localhost', :inet6) #=> [#<IPAddr:[::1]>]
@param hostname [String] The hostname to resolve @param address_family [Symbol] if set, limit search to address_family
, :inet
or :inet6
@return [Array<IPAddr>]
# File lib/puffy/resolver.rb, line 24 def resolv(hostname, address_family = nil) if hostname.is_a?(IPAddr) resolv_ipaddress(hostname, address_family) else resolv_hostname(hostname, address_family) end end
Private Instance Methods
filter_af(address, address_family)
click to toggle source
# File lib/puffy/resolver.rb, line 38 def filter_af(address, address_family) return [] if address_family && !match_af?(address, address_family) [address] end
match_af?(address, address_family)
click to toggle source
# File lib/puffy/resolver.rb, line 44 def match_af?(address, address_family) (address.ipv6? && address_family == :inet6) || (address.ipv4? && address_family == :inet) end
resolv_hostname(hostname, address_family)
click to toggle source
# File lib/puffy/resolver.rb, line 49 def resolv_hostname(hostname, address_family) result = [] result += resolv_hostname_ipv6(hostname) if address_family.nil? || address_family == :inet6 result += resolv_hostname_ipv4(hostname) if address_family.nil? || address_family == :inet raise "\"#{hostname}\" does not resolve to any valid IP#{@af_str[address_family]} address." if result.empty? result end
resolv_hostname_ipv4(hostname)
click to toggle source
# File lib/puffy/resolver.rb, line 62 def resolv_hostname_ipv4(hostname) resolv_hostname_record(hostname, Resolv::DNS::Resource::IN::A) end
resolv_hostname_ipv6(hostname)
click to toggle source
# File lib/puffy/resolver.rb, line 58 def resolv_hostname_ipv6(hostname) resolv_hostname_record(hostname, Resolv::DNS::Resource::IN::AAAA) end
resolv_hostname_record(hostname, record)
click to toggle source
# File lib/puffy/resolver.rb, line 66 def resolv_hostname_record(hostname, record) @dns.getresources(hostname, record).collect { |r| IPAddr.new(r.address.to_s) }.sort end
resolv_ipaddress(address, address_family)
click to toggle source
# File lib/puffy/resolver.rb, line 34 def resolv_ipaddress(address, address_family) filter_af(address, address_family) end