Networking Basics
IP Address Check
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
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}"
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
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
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