Module: IPAddress

Included in:
IPv4, IPv6
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

Class Method Details

.valid?(addr) ⇒ Boolean

Checks if the given string is a valid IP address, either IPv4 or IPv6

Example:

IPAddress::valid? "2002::1"
  #=> true

IPAddress::valid? "10.0.0.256"   
  #=> false

Returns:

  • (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

Checks if the given string is a valid IPv4 address

Example:

IPAddress::valid_ipv4? "2002::1"
  #=> false

IPAddress::valid_ipv4? "172.16.10.1"
  #=> true

Returns:

  • (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

Returns:

  • (Boolean)


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

Checks if the given string is a valid IPv6 address

Example:

IPAddress::valid_ipv6? "2002::1"
  #=> true

IPAddress::valid_ipv6? "2002::DEAD::BEEF"
  #=> false

Returns:

  • (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