class Net::Address::IPv4
Attributes
mask[R]
Public Class Methods
new(address, mask=nil)
click to toggle source
# File lib/net/address/ipv4.rb, line 16 def initialize(address, mask=nil) parse_address(address) if @mask.nil? @mask = Net::Address::Mask.new(mask.nil? ? 32 : mask) else raise ArgumentError, 'To many parameters' unless mask.nil? end end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/net/address/ipv4.rb, line 37 def <=>(other) self.to_i <=> (other.is_a?(self.class) ? other.to_i : self.class.new(other).to_i) end
broadcast()
click to toggle source
# File lib/net/address/ipv4.rb, line 50 def broadcast self.class.new(range.last, mask) end
each() { |class.new(address, mask)| ... }
click to toggle source
# File lib/net/address/ipv4.rb, line 64 def each (net.to_i..broadcast.to_i).each do |address| yield self.class.new(address, mask) end end
include?(address)
click to toggle source
# File lib/net/address/ipv4.rb, line 41 def include?(address) address = address.is_a?(self.class) ? address : self.class.new(address) address.to_i >= net.to_i and address <= broadcast.to_i end
net()
click to toggle source
# File lib/net/address/ipv4.rb, line 46 def net self.class.new(range.first, mask) end
next()
click to toggle source
# File lib/net/address/ipv4.rb, line 59 def next next_address = to_i + 1 broadcast >= next_address ? self.class.new(next_address) : nil end
previous()
click to toggle source
# File lib/net/address/ipv4.rb, line 54 def previous previous = to_i - 1 net <= previous ? self.class.new(previous) : nil end
to_i()
click to toggle source
# File lib/net/address/ipv4.rb, line 33 def to_i @address end
to_s()
click to toggle source
# File lib/net/address/ipv4.rb, line 25 def to_s [@address].pack('N*').unpack('C*').join('.') end
to_str()
click to toggle source
# File lib/net/address/ipv4.rb, line 29 def to_str "#{to_s}/#{mask.to_cidr}" end
Private Instance Methods
parse_address(address)
click to toggle source
# File lib/net/address/ipv4.rb, line 73 def parse_address(address) if address.kind_of?(Net::Address::IPv4) @address = address.to_i @mask = address.mask elsif address.kind_of?(IPAddr) @address = address.to_i elsif address.kind_of?(Integer) parse_integer(address) elsif address.kind_of?(String) parse_string(address) else raise ArgumentError, "No implicit conversion of #{address.class.name} to #{self.class.name}" end end
parse_integer(address)
click to toggle source
# File lib/net/address/ipv4.rb, line 97 def parse_integer(address) @address = address if address.to_i < 0 or address.to_i > 0xffffffffffff raise ArgumentError, "No implicit conversion of #{address.class.name} : #{address} to #{self.class.name}" end end
parse_string(address)
click to toggle source
# File lib/net/address/ipv4.rb, line 88 def parse_string(address) address = address.strip match_data = address.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/?(\d{1,2})*$/) raise ArgumentError,"No valid IPv4 address #{address}" if match_data.nil? @address = match_data[1].split(/\./).map{|c| c.to_i}.pack('C*').unpack('N').first @mask = Net::Address::Mask.new(match_data[2]) unless match_data[2].nil? raise ArgumentError, "No valid IPv4 address #{address}" unless self.to_s == match_data[1] end
range()
click to toggle source
# File lib/net/address/ipv4.rb, line 104 def range bits = mask.to_i & 0xFFFFFFFF min = bits & to_i max = min + (bits ^ 0xFFFFFFFF) [min, max] end