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_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
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
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
directed_broadcast?()
click to toggle source
# File lib/net/ipaddress/version4/instance.rb, line 34 def directed_broadcast? @octets == directed_broadcast_octets end
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
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
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?
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
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