11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/reversed.rb', line 11
def self.lookup(ip, timeout: 5, nameservers: nil, fallback: true)
ip = ip.to_s
unless ip.empty?
begin
ip = IPAddr.new(ip)
rescue IPAddr::InvalidAddressError
raise ArgumentError, "Invalid IP"
end
options = {
retry_number: 3,
udp_timeout: timeout
}
options[:nameservers] = nameservers if nameservers
begin
resolver = Net::DNS::Resolver.new(options).search(ip.reverse, Net::DNS::PTR)
answer = resolver.answer.first
if !answer && fallback
answer = resolver.authority.first
end
if answer && !answer.value.empty?
answer.value.split(" ").first[0..-2]
end
rescue Net::DNS::Resolver::NoResponseError
nil
rescue Errno::EAFNOSUPPORT
options[:use_tcp] = true
options[:tcp_timeout] = timeout
retry
end
end
end
|