rubyresolv

Ruby resolv library how to exclude non-IPv4 addresses


I want to use Resolv library to resolve hostnames including 'localhost' but it lists non-IPv4 addresses also. I want to find out first IPv4 address. Looked at the library but could not find a way to do so. Does anyone know of a way to do this or should we go for other gems like Net:DNS or dnsruby?


Solution

  • If i right understand you can use Resolv::IPv4::Regexp and Resolv::IPv6::Regexp look example:

    => require 'resolv'
    => p Resolv.getaddress "www.ruby-lang.org"
    #> "23.23.144.121"
    => ip = "23.23.144.121"
    => ip =~ Resolv::IPv4::Regex
    #> 0
    => ip =~ Resolv::IPv6::Regex
    #> nil
    => case ip
    => when Resolv::IPv4::Regex
    => puts "It's a valid IPv4 address."
    => when Resolv::IPv6::Regex
    => puts "It's a valid IPv6 address."
    => else
    => puts "It's not a valid IP address."
    => end
    #> It's a valid IPv4 address.