From 93039cb9e88b48d0651c568595db4ccab43b3826 Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Tue, 20 Nov 2012 09:59:46 +0000 Subject: Added utility class. --- lib/custodian/dnsutil.rb | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 lib/custodian/dnsutil.rb diff --git a/lib/custodian/dnsutil.rb b/lib/custodian/dnsutil.rb new file mode 100644 index 0000000..e42d5e3 --- /dev/null +++ b/lib/custodian/dnsutil.rb @@ -0,0 +1,72 @@ + + +require 'ipaddr' +require 'socket' +require 'timeout' + + + +# +# This class is responsible for doing forward/reverse DNS lookups +# +class DNSUtil + + + # + # Return the reverse DNS for the specified IP address, nil on failure. + # + def DNSUtil.ip_to_hostname( ip ) + resolved = nil + begin + timeout( 4 ) do + begin + Socket.getaddrinfo(ip, 'echo').each do |a| + resolved = a[2] if ( a ) + end + rescue SocketError + resolved = nil + end + end + rescue Timeout::Error => e + resolved = nil + end + resolved + end + + + # + # Convert a hostname to an IP address, return nil on failure. + # + def DNSUtil.hostname_to_ip( hostname ) + + resolved = nil + + begin + timeout( 4 ) do + begin + Socket.getaddrinfo(hostname, 'echo').each do |a| + resolved = a[3] if ( a ) + end + rescue SocketError + resolved = nil + end + end + rescue Timeout::Error => e + resolved = nil + end + resolved + end + +end + + +if __FILE__ == $0 then + + %w( ssh.steve.org.uk ipv6.steve.org.uk ).each do |name| + puts "Hostname test: #{name} #{DNSUtil.hostname_to_ip(name) }" + end + + %w( 80.68.85.46 80.68.85.48 2001:41c8:125:46::22 ).each do |name| + puts "Hostname test: #{name} #{DNSUtil.ip_to_hostname(name) }" + end +end -- cgit v1.2.1