Module: IPAddress
- Defined in:
- lib/ipaddress/ipv4.rb,
lib/ipaddress/ipv6.rb,
lib/ipaddress/ipbase.rb,
lib/ipaddress/prefix.rb
Defined Under Namespace
Classes: IPBase, IPv4, IPv6, Prefix, Prefix128, Prefix32
Class Method Summary collapse
-
.valid?(addr) ⇒ Boolean
Checks if the given string is a valid IP address, either IPv4 or IPv6.
-
.valid_ipv4?(addr) ⇒ Boolean
Checks if the given string is a valid IPv4 address.
-
.valid_ipv4_netmask?(addr) ⇒ Boolean
Checks if the argument is a valid IPv4 netmark expressed in dotted decimal format.
-
.valid_ipv6?(addr) ⇒ Boolean
Checks if the given string is a valid IPv6 address.
Class Method Details
.valid?(addr) ⇒ Boolean
17 18 19 |
# File 'lib/ipaddress/ipbase.rb', line 17 def self.valid?(addr) valid_ipv4?(addr) || valid_ipv6?(addr) end |
.valid_ipv4?(addr) ⇒ Boolean
32 33 34 35 36 37 |
# File 'lib/ipaddress/ipbase.rb', line 32 def self.valid_ipv4?(addr) if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/ =~ addr return $~.captures.all? {|i| i.to_i < 256} end false end |
.valid_ipv4_netmask?(addr) ⇒ Boolean
Checks if the argument is a valid IPv4 netmark expressed in dotted decimal format.
IPAddress.valid_ipv4_netmask? "255.255.0.0"
#=> true
46 47 48 49 50 51 |
# File 'lib/ipaddress/ipbase.rb', line 46 def self.valid_ipv4_netmask?(addr) arr = addr.split(".").map{|i| i.to_i}.pack("CCCC").unpack("B*").first.scan(/01/) arr.empty? && valid_ipv4?(addr) rescue return false end |
.valid_ipv6?(addr) ⇒ Boolean
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/ipaddress/ipbase.rb', line 64 def self.valid_ipv6?(addr) # IPv6 (normal) return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr # IPv6 (IPv4 compat) return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_ipv4?($') return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?($') return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?($') false end |