Module: UsefulUtilities::IP
Overview
Provides a bunch of convinient methods to deal with ip addresses The module rely on stdlib ipaddr
Instance Method Summary collapse
-
#acceptable_network_mask?(network_mask, version:) ⇒ Boolean
ArgumentError raises if version is not equal 4 or 6.
-
#integer_to_ip_string(address, version:) ⇒ Object
If supplied address can not be converted into ip address string then ArgumentError raises.
-
#ip_string_to_integer(ip_string) ⇒ Object
ArgumentError raises if ip string can not be parsed as ip address.
-
#ip_string_to_integer_with_version(ip_string) ⇒ Object
the first: integer representation of supplied ip string, the second: version of ip protocol 4 or 6.
-
#network_address(ip_string, network_mask) ⇒ String
ip address and it’s network mask.
-
#private_ip?(ip_string) ⇒ Boolean
If ip_sting is non-parsable ip address ArgumentError raises.
-
#valid_ip?(ip_string) ⇒ Boolean
and false otherwise.
Instance Method Details
#acceptable_network_mask?(network_mask, version:) ⇒ Boolean
ArgumentError raises if version is not equal 4 or 6.
177 178 179 180 181 |
# File 'lib/useful_utilities/ip.rb', line 177 def acceptable_network_mask?(network_mask, version:) return false unless network_mask.is_a? Integer network_mask >= MIN_NET_MASK && network_mask <= max_network_mask(version) end |
#integer_to_ip_string(address, version:) ⇒ Object
If supplied address can not be converted into ip address string then ArgumentError raises.
97 98 99 100 101 102 103 104 105 |
# File 'lib/useful_utilities/ip.rb', line 97 def integer_to_ip_string(address, version:) unless address.is_a? Integer raise ArgumentError, 'Supplied address is not integer!' end IPAddr.new(address, ip_address_family(version)).to_s rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError raise ArgumentError, 'Invalid address!' end |
#ip_string_to_integer(ip_string) ⇒ Object
ArgumentError raises if ip string can not be parsed as ip address.
113 114 115 116 117 |
# File 'lib/useful_utilities/ip.rb', line 113 def ip_string_to_integer(ip_string) IPAddr.new(ip_string).to_i rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError raise ArgumentError, 'Invalid ip address string supplied!' end |
#ip_string_to_integer_with_version(ip_string) ⇒ Object
the first: integer representation of supplied ip string, the second: version of ip protocol 4 or 6. ArgumentError raises if ip string can not be parsed as ip address.
127 128 129 130 131 132 133 134 135 |
# File 'lib/useful_utilities/ip.rb', line 127 def ip_string_to_integer_with_version(ip_string) ip = IPAddr.new(ip_string) version = IPV4 if ip.ipv4? version = IPV6 if ip.ipv6? [ip.to_i, version] rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError raise ArgumentError, 'Invalid ip address string supplied!' end |
#network_address(ip_string, network_mask) ⇒ String
ip address and it’s network mask
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/useful_utilities/ip.rb', line 143 def network_address(ip_string, network_mask) ip = IPAddr.new(ip_string) version = if ip.ipv4? IPV4 elsif ip.ipv6? IPV6 else raise ArgumentError, 'Unsupported ip address version!' end unless acceptable_network_mask?(network_mask, version: version) raise ArgumentError, "Invalid network mask: '#{network_mask}' for address: '#{ip_string}'" end ip_network_address = IPAddr.new(ZERO_IP_INTEGER, ip_address_family(version)) .~ .<<(max_network_mask(version) - network_mask) .&(ip) ip_network_address.to_s rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError raise ArgumentError, 'Invalid ip address string supplied!' end |
#private_ip?(ip_string) ⇒ Boolean
If ip_sting is non-parsable ip address ArgumentError raises. It is a wrapper on the private? method of IPAddr class instance. IPv4 addresses in 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 as defined in RFC 1918 and IPv6 Unique Local Addresses in fc00::/7 as defined in RFC 4193 are considered private.
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/useful_utilities/ip.rb', line 77 def private_ip?(ip_string) ip = IPAddr.new(ip_string) # starting from ruby 2.5.0 an IPAddr instance has built-in private? method # use the built-in method if exists return ip.private? if ip.respond_to?(:private?) check_private_ip(ip) rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError raise ArgumentError, 'Invalid ip address string supplied!' end |
#valid_ip?(ip_string) ⇒ Boolean
and false otherwise
60 61 62 63 64 65 |
# File 'lib/useful_utilities/ip.rb', line 60 def valid_ip?(ip_string) IPAddr.new(ip_string) true rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError false end |