The IPAddr library can classify address strings without sending network traffic.

ip address `IPAddr` parses an address and exposes whether it is IPv4 or IPv6.

IP Address Check

address_text
ip_address_check.rb
Replay: real traced execution (multi-file project)
require "ipaddr"

address_text = "192.168.1.10"
address = IPAddr.new(address_text)

version = address.ipv4? ? "ipv4" : "ipv6"
loopback = address.loopback?
private_range = address.ipv4? && address.to_range.first.to_s.start_with?("192.168.")

puts "address=#{address_text}"
puts "version=#{version}"
puts "loopback=#{loopback}"
puts "private_range=#{private_range}"
require "ipaddr"

address_text = "127.0.0.1"
address = IPAddr.new(address_text)

version = address.ipv4? ? "ipv4" : "ipv6"
loopback = address.loopback?
private_range = address.ipv4? && address.to_range.first.to_s.start_with?("192.168.")

puts "address=#{address_text}"
puts "version=#{version}"
puts "loopback=#{loopback}"
puts "private_range=#{private_range}"
require "ipaddr"

address_text = "2001:db8::1"
address = IPAddr.new(address_text)

version = address.ipv4? ? "ipv4" : "ipv6"
loopback = address.loopback?
private_range = address.ipv4? && address.to_range.first.to_s.start_with?("192.168.")

puts "address=#{address_text}"
puts "version=#{version}"
puts "loopback=#{loopback}"
puts "private_range=#{private_range}"
  1. address_text ← 192.168.1.10, address ← 192.168.1.10, version ← ipv4

    1require "ipaddr"23address_text→ 192.168.1.10 = "192.168.1.10"  #@address_text="127.0.0.1", "2001:db8::1"4address→ 192.168.1.10 = IPAddr.new(address_text192.168.1.10)56version→ ipv4 = address.ipv4?true ? "ipv4" : "ipv6"7loopback→ false = address.loopback?false8private_range→ true = address.ipv4?true && address.to_range.first.to_s.start_with?("192.168.")true910puts "address=#{address_text192.168.1.10}"11puts "version=#{versionipv4}"12puts "loopback=#{loopbackfalse}"13puts "private_range=#{private_rangetrue}"
    outputaddress=192.168.1.10
    version=ipv4
    loopback=false
    private_range=true
  1. address_text ← 127.0.0.1, address ← 127.0.0.1, version ← ipv4

    1require "ipaddr"23address_text→ 127.0.0.1 = "127.0.0.1"4address→ 127.0.0.1 = IPAddr.new(address_text127.0.0.1)56version→ ipv4 = address.ipv4?true ? "ipv4" : "ipv6"7loopback→ true = address.loopback?true8private_range→ false = address.ipv4?true && address.to_range.first.to_s.start_with?("192.168.")false910puts "address=#{address_text127.0.0.1}"11puts "version=#{versionipv4}"12puts "loopback=#{loopbacktrue}"13puts "private_range=#{private_rangefalse}"
    outputaddress=127.0.0.1
    version=ipv4
    loopback=true
    private_range=false
  1. address_text ← 2001:db8::1, address ← 2001:db8::1, version ← ipv6

    1require "ipaddr"23address_text→ 2001:db8::1 = "2001:db8::1"4address→ 2001:db8::1 = IPAddr.new(address_text2001:db8::1)56version→ ipv6 = address.ipv4?false ? "ipv4" : "ipv6"7loopback→ false = address.loopback?false8private_range→ false = address.ipv4?false && address.to_range.first.to_s.start_with?("192.168.")false910puts "address=#{address_text2001:db8::1}"11puts "version=#{versionipv6}"12puts "loopback=#{loopbackfalse}"13puts "private_range=#{private_rangefalse}"
    outputaddress=2001:db8::1
    version=ipv6
    loopback=false
    private_range=false