class Net::IPAddress::Version4

Constants

DELIMITER
FULL_MASK
IETF
ISP
LINKLOCAL
LOCALHOST
MASK_PATTERN
OCTETS_PATTERN
PATTERN
PREFIXES

Regular masks for “prefix”, and they are frozen. @example

[[0, 0, 0, 0],          # 0(first)
[128, 0, 0, 0],         # 1
....,                   # 2 ~ 23
[255, 255, 255, 0],     # 24
....,                   # 24 ~ 31
[255, 255, 255, 255]]   # 32(last)
PRIVATES
TESTS

Public Class Methods

bit_length() click to toggle source

@return [32]

# File lib/net/ipaddress/version4/singleton_class.rb, line 9
def bit_length
  32
end
for_i(int, mask_int=nil)
Alias for: for_integer
for_integer(int, mask_int=nil) click to toggle source

@param [Integer] int @return [IPAddress]

# File lib/net/ipaddress/version4/singleton_class.rb, line 48
def for_integer(int, mask_int=nil)
  new(octets_for_integer(int), mask_int ? octets_for_integer(mask_int) : FULL_MASK)
end
Also aliased as: for_i
octets_for_integer(int) click to toggle source

@param [Integer] int @return [Array<Fixnum>]

# File lib/net/ipaddress/version4/singleton_class.rb, line 60
def octets_for_integer(int)
  int = int.to_int
  raise RangeError unless (0..4_294_967_295).cover?(int)

  int.to_s(2).rjust(bit_length, '0')
     .scan(/[01]{8}/).map { |s| s.to_i(2) }
end
octets_for_string(str) click to toggle source
# File lib/net/ipaddress/version4/singleton_class.rb, line 54
def octets_for_string(str)
  str.split(DELIMITER).map(&:to_i)
end
parse(str) click to toggle source

@return [Version4]

# File lib/net/ipaddress/version4/singleton_class.rb, line 14
def parse(str)
  case str
  when /\A#{PATTERN}\z/o
    mask = case
           when $~[:mask]
             octets_for_string($~[:mask])
           when $~[:prefix_length]
             PREFIXES[$~[:prefix_length].to_i]
           else
             FULL_MASK
           end

    new(octets_for_string($~[:octets]), mask)
  else
    raise InvalidAddress, str
  end
end
parse_big_endian(str, mask_str=nil) click to toggle source

@param [String] str @return [IPAddress]

# File lib/net/ipaddress/version4/singleton_class.rb, line 34
def parse_big_endian(str, mask_str=nil)
  new(str.unpack('C4'), mask_str ? mask_str.unpack('C4') : FULL_MASK)
end
valid_string?(str) click to toggle source
# File lib/net/ipaddress/version4/singleton_class.rb, line 38
def valid_string?(str)
  parse(str)
rescue InvalidAddress
  false
else
  true
end

Public Instance Methods

===(other)
Alias for: cover?
apipa?()
Alias for: linklocal?
broadcast()
Alias for: directed_broadcast
broadcast?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 38
def broadcast?
  limited_broadcast? || directed_broadcast?
end
cidr?() click to toggle source

true if mask is /0 ~ /32

# File lib/net/ipaddress/version4/instance.rb, line 64
def cidr?
  PREFIXES.include?(@mask_octets)
end
class_a?() click to toggle source

RFC791

# File lib/net/ipaddress/version4/instance.rb, line 74
def class_a?
  (_bits.take(1) == [0]) && (prefix_length == 8)
end
class_b?() click to toggle source

RFC791

# File lib/net/ipaddress/version4/instance.rb, line 79
def class_b?
  (_bits.take(2) == [1, 0]) && (prefix_length == 16)
end
class_c?() click to toggle source

RFC791

# File lib/net/ipaddress/version4/instance.rb, line 84
def class_c?
  (_bits.take(3) == [1, 1, 0]) && (prefix_length == 24)
end
class_d?() click to toggle source

RFC3171

# File lib/net/ipaddress/version4/instance.rb, line 89
def class_d?
  new([224, 0, 0, 0], PREFIXES[4]).cover?(self)
end
class_e?() click to toggle source

RFC1112

# File lib/net/ipaddress/version4/instance.rb, line 94
def class_e?
  new([240, 0, 0, 0], PREFIXES[4]).cover?(self)
end
classible?() click to toggle source

It is able to deal with “classfull”

# File lib/net/ipaddress/version4/instance.rb, line 69
def classible?
  %w[a b c d e].any? { |s| __send__(:"class_#{s}?") }
end
cover?(other) click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 98
def cover?(other)
  family?(other) &&
    (network_octets..directed_broadcast_octets).cover?(other.octets)
end
Also aliased as: include?, ===
directed_broadcast() click to toggle source

@return [Version4]

# File lib/net/ipaddress/version4/instance.rb, line 48
def directed_broadcast
  self.class.new(directed_broadcast_octets, @mask_octets)
end
Also aliased as: broadcast, last
directed_broadcast?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 34
def directed_broadcast?
  @octets == directed_broadcast_octets
end
example?()
Alias for: test?
family?(other) click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 106
def family?(other)
  other.kind_of?(::Net::IPAddress) && other.ipv4address?
end
global?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 147
def global?
  !private?
end
host?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 22
def host?
  @mask_octets == FULL_MASK
end
ietf?() click to toggle source

RFC5736

# File lib/net/ipaddress/version4/instance.rb, line 180
def ietf?
  self.class::IETF.cover?(self)
end
include?(other)
Alias for: cover?
inspect() click to toggle source

@return [String] @example

IPAddress.parse('192.168.1.1/255.255.255.247').inspect
  #=> "#<IPv4: 192.168.1.1/255.255.255.247(!)>"
IPAddress.parse('192.168.1.1/255.255.255.0').inspect
  #=> "#<IPv4: 192.168.1.1/255.255.255.0(24)>"
# File lib/net/ipaddress/version4/instance.rb, line 18
def inspect
  "#<IPv4: #{to_s}/#{string_for_octets(@mask_octets)}(#{cidr? ? prefix_length : '!'})>"
end
ipv4address?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 110
def ipv4address?
  true
end
ipv6address?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 114
def ipv6address?
  false
end
isp?() click to toggle source

RFC6598

# File lib/net/ipaddress/version4/instance.rb, line 171
def isp?
  self.class::ISP.cover?(self)
end
last()
Alias for: directed_broadcast
limited_broadcast?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 30
def limited_broadcast?
  @octets == FULL_MASK
end
linklocal?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 151
def linklocal?
  self.class::LINKLOCAL.cover?(self)
end
Also aliased as: apipa?
localhost?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 157
def localhost?
  self.class::LOCALHOST.cover?(self)
end
Also aliased as: loopback?
loopback?()
Alias for: localhost?
multicast?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 59
def multicast?
  _bits.take(4) == [1, 1, 1, 0]
end
network() click to toggle source

@return [Version4]

# File lib/net/ipaddress/version4/instance.rb, line 43
def network
  self.class.new(network_octets, @mask_octets)
end
network?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 26
def network?
  @octets == network_octets
end
next(step=1)
Alias for: succ
prefix_length() click to toggle source

@return [Fixnum]

# File lib/net/ipaddress/version4/instance.rb, line 135
def prefix_length
  if index = PREFIXES.index(@mask_octets)
    index
  else
    raise TypeError, 'this address is not under any prefix masks'
  end
end
private?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 143
def private?
  self.class::PRIVATES.any? { |addr| addr.cover?(self) }
end
segment?(other) click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 118
def segment?(other)
  family?(other) &&
    (@mask_octets == other.mask_octets) &&
    (network_octets == other.network_octets)
end
special?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 175
def special?
  !(linklocal? || localhost? || isp? || test? || ietf?)
end
succ(step=1) click to toggle source

@return [Version4] next ordered object

# File lib/net/ipaddress/version4/instance.rb, line 125
def succ(step=1)
  self.class.new(
    self.class.octets_for_integer(to_i + step.to_int),
    @mask_octets
  )
end
Also aliased as: next
test?() click to toggle source

RFC5737

# File lib/net/ipaddress/version4/instance.rb, line 164
def test?
  self.class::TESTS.any? { |addr| addr.cover?(self) }
end
Also aliased as: example?
to_i() click to toggle source

@return [Integer]

# File lib/net/ipaddress/version4/instance.rb, line 194
def to_i
  @to_i ||= _to_i
end
to_ipv4address() click to toggle source

@return [self]

# File lib/net/ipaddress/version4/instance.rb, line 185
def to_ipv4address
  self
end
to_ipv6address() click to toggle source

@todo @return [Version6]

# File lib/net/ipaddress/version4/instance.rb, line 191
def to_ipv6address; end
to_s() click to toggle source

@return [String]

# File lib/net/ipaddress/version4/instance.rb, line 8
def to_s
  string_for_octets(@octets)
end
unicast?() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 55
def unicast?
  host? || !(broadcast? || multicast?)
end

Protected Instance Methods

_bits() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 212
def _bits
  @bits ||=
    byte_order.unpack1('B32').chars.map(&:to_i).freeze
end
directed_broadcast_octets() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 208
def directed_broadcast_octets
  @directed_broadcast_octets ||= _directed_broadcast_octets
end
network_octets() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 204
def network_octets
  @network_octets ||= _network_octets
end
values() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 200
def values
  @values ||= [@octets, @mask_octets]
end

Private Instance Methods

_directed_broadcast_octets() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 236
def _directed_broadcast_octets
  octet = @octets.to_enum
  @mask_octets.map { |mo| octet.next | (mo ^ 255) }
end
_network_octets() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 231
def _network_octets
  mask_bit = @mask_octets.to_enum
  @octets.map { |bit| bit & mask_bit.next }
end
_to_i() click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 219
def _to_i
  _bits.join.to_i(2)
end
memorize() click to toggle source
Calls superclass method Net::IPAddress#memorize
# File lib/net/ipaddress/version4/instance.rb, line 223
def memorize
  super
  network_octets
  directed_broadcast_octets

  nil
end
string_for_octets(octets) click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 241
def string_for_octets(octets)
  octets.join(DELIMITER)
end