Copyright (c) 2006 Dustin Spinhirne Licensed under the same terms as Ruby, No Warranty is provided.
Comments are welcome. Please include 'IPAdmin' in the title of any emails.
Dustin Spinhirne
=Examples:
#!/usr/bin/ruby
require 'rubygems' require_gem 'ipadmin'
#============================================================================#
IPAdmin::CIDR
#============================================================================# puts "IPAdmin::CIDR" print "\n"
new
cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24') cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.1', :Netmask => '255.255.255.0', :Tag => => 'cidr4 tag') cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::1/64')
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26') cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/96')
reader/writer
puts "reader/writer" puts "cidr4 tag '#cidr4cidr4.tag['test']'" cidr4.tag = 'modified cidr4 tag' puts "updated cidr4 tag '#cidr4cidr4.tag['test']'" puts "cidr4 version #cidr4cidr4.version" print "\n"
bits
puts "bits" puts "cidr4 netmask in bits #cidr4cidr4.bits()" puts "cidr6 netmask in bits #cidr6cidr6.bits()" print "\n"
contains?
puts "contains" puts "#cidr4cidr4.desc contains #cidr4_2cidr4_2.desc" if ( cidr4.contains?(cidr4_2) ) puts "#cidr6cidr6.desc contains #cidr6_2cidr6_2.desc" if ( cidr6.contains?(cidr6_2) ) print "\n"
desc
puts "desc" puts "cidr4 description #cidr4cidr4.desc()" puts "cidr6 description #cidr6cidr6.desc()" puts "cidr6 short-hand description #=> true)" print "\n"
enumerate
puts "enumerate" puts "first 4 cidr4 addresses (bitstep 32)" cidr4.enumerate(:Limit => 4, :Bitstep => 32).each {|x| puts " #{x}"}
puts "first 4 cidr6 addresses (bitstep 32)" cidr6.enumerate(:Limit => 4, :Bitstep => 32, :Objectify => true).each {|x| puts " #{x.desc}"} print "\n"
hostmask_ext
puts "hostmask_ext" puts "cidr4 extended hostmask #cidr4cidr4.hostmask_ext()" print "\n"
ip
puts "ip" puts "cidr4 ip #cidr4cidr4.ip()" puts "cidr6 short-hand ip #=> true)" print "\n"
last
puts "last" puts "cidr4 last ip #cidr4cidr4.last()" puts "cidr6 last ip #=> true)" print "\n"
netmask
puts "netmask" puts "cidr4 netmask in CIDR format #cidr4cidr4.netmask()" puts "cidr6 netmask in CIDR format #cidr6cidr6.netmask()" print "\n"
netmask_ext
puts "netmask_ext" puts "cidr4 extended netmask #cidr4cidr4.netmask_ext()" print "\n"
network
puts "network" puts "cidr4 network address #cidr4cidr4.network()" puts "cidr6 network address #=> true)" print "\n"
next_ip
puts "next_ip" puts "cidr4 next ip #cidr4cidr4.next_ip()" puts "cidr6 next ip #=> true)" print "\n"
next_subnet
puts "next_subnet" puts "cidr4 next subnet #cidr4cidr4.next_subnet()" puts "cidr6 next subnet #=> true)" print "\n"
nth
puts "nth" puts "cidr4 1st ip is #=> 1)" puts "cidr6 1st ip is #=> 1, :Objectify => true)).base" print "\n"
packed_hostmask
puts "packed_hostmask" puts "cidr4 packed_hostmask is #cidr4cidr4.packed_hostmaskcidr4.packed_hostmask.to_s(16)" puts "cidr6 packed_hostmask is #cidr6cidr6.packed_hostmaskcidr6.packed_hostmask.to_s(16)" print "\n"
packed_netmask
puts "packed_netmask" puts "cidr4 packed_netmask is #cidr4cidr4.packed_netmaskcidr4.packed_netmask.to_s(16)" puts "cidr6 packed_netmask is #cidr6cidr6.packed_netmaskcidr6.packed_netmask.to_s(16)" print "\n"
packed_network
puts "packed_network" puts "cidr4 packed_network is #cidr4cidr4.packed_networkcidr4.packed_network.to_s(16)" puts "cidr6 packed_network is #cidr6cidr6.packed_networkcidr6.packed_network.to_s(16)" print "\n"
range
puts "range" cidr4.range(:Indexes => [20,0], :Bitstep => 5).each {|x| puts x} cidr6.range(:Indexes => [20,0], :Bitstep => 5).each {|x| puts x} print "\n"
remainder
puts "remainder" cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26') cidr4.remainder(:Exclude => cidr4_2).each {|x| puts x} print "\n"
resize!
puts "resize!" cidr4.resize!(:Subnet => 25) cidr6.resize!(:Subnet => 65) puts "cidr4 resized is #cidr4cidr4.desc" puts "cidr6 resized is #cidr6cidr6.desc" print "\n"
size
puts "size" puts "cidr4 size is #cidr4cidr4.size()" puts "cidr6 size is #cidr6cidr6.size()" print "\n"
subnet
puts "subnet" puts "#cidr4cidr4.desc subnetted into at least 3 /28 ranges" cidr4.subnet(:Subnet => 28, :MinCount => 3).each {|x| puts " #{x}"}
puts "#=> true) subnetted into at least 4 /67 ranges" cidr6.subnet(:Subnet => 67, :MinCount => 4, :Short => true).each {|x| puts " #{x}"}
print "\n\n\n" #=====================================#
#=====================================#
#============================================================================#
IPAdmin::Tree
#============================================================================# puts "IPAdmin::Tree" print "\n"
cidr4 = [IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24'), IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26'), IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26'), IPAdmin::CIDR.new(:CIDR => '192.168.1.128/26'), IPAdmin::CIDR.new(:CIDR => '192.168.1.192/26'), IPAdmin::CIDR.new(:CIDR => '192.168.1.0/27'), IPAdmin::CIDR.new(:CIDR => '192.168.1.0/28'), IPAdmin::CIDR.new(:CIDR => '192.168.1.16/28'), IPAdmin::CIDR.new(:CIDR => '192.168.1.16/29'), IPAdmin::CIDR.new(:CIDR => '192.168.1.32/27')]
cidr6 = [IPAdmin::CIDR.new(:CIDR => 'fec0::/64'), IPAdmin::CIDR.new(:CIDR => 'fec0::/66'), IPAdmin::CIDR.new(:CIDR => 'fec0::4000:0:0:0/66'), IPAdmin::CIDR.new(:CIDR => 'fec0::8000:0:0:0/66'), IPAdmin::CIDR.new(:CIDR => 'fec0::c000:0:0:0/66'), IPAdmin::CIDR.new(:CIDR => 'fec0::c000:0:0:0/67'), IPAdmin::CIDR.new(:CIDR => 'fec0::/67'), IPAdmin::CIDR.new(:CIDR => 'fec0::2000:0:0:0/67')]
new
tree4 = IPAdmin::Tree.new(:Version => 4) tree6 = IPAdmin::Tree.new(:Version => 6)
add
puts "add" cidr4.each do |x| puts "adding #xx.desc..." tree4.add(x) end cidr6.each do |x| puts "adding #xx.desc..." tree6.add(x) end print "\n"
# dump
puts "dump" puts "dumping & printing tree4" dumped = tree4.dump() dumped.each do |val| obj = val depth = val if (depth > 0) indent = " " * (depth3) puts indent << obj.desc() else puts obj.desc() end end print "\n" puts "dumping & printing tree6" dumped = tree6.dump() dumped.each do |val| obj = val depth = val if (depth > 0) indent = " " * (depth3) puts indent << obj.desc() else puts obj.desc() end end print "\n"
find space
puts "find_space with at least 28 IP's in it" puts "available space with at least 28 IPs" space = tree4.find_space(:IPCount => 28) space.each do |obj| puts " #objobj.desc" end print "\n" puts "available /67 space" space = tree6.find_space(:Subnet => 67) space.each do |obj| puts " #objobj.desc" end print "\n"
remove
puts "remove" puts "removing #cidr4[8]cidr4[8].desc" tree4.remove(cidr4) puts tree4.show() print "\n" puts "removing #cidr6[5]cidr6[5].desc" tree6.remove(cidr6) puts tree6.show() print "\n"
prune
puts "prune" puts "pruning #cidr4[4]cidr4[4].desc" tree4.prune(cidr4) puts tree4.show() print "\n" puts "pruning #cidr6[1]cidr6[1].desc" tree6.prune(cidr6) puts tree6.show() print "\n"
# collapse
puts "collapse" puts "collapsed tree4 is..." new_tree4 = tree4.collapse() puts new_tree4.show() print "\n" puts "collapsed tree6 is..." new_tree6 = tree6.collapse() puts new_tree6.show()
print "\n\n\n" #=====================================#
#=====================================#
#============================================================================#
IPAdmin Methods
#============================================================================# puts "IPAdmin Methods" print "\n"
validate ip
puts "validate ip" puts "192.168.1.0 is valid" if ( IPAdmin.validate_ipv4_addr('192.168.1.0') ) puts "fec0::0 is valid" if ( IPAdmin.validate_ipv6_addr('fec0::0') ) print "\n"
validate netmask
puts "validate netmask" puts "255.255.255.0 is valid" if (IPAdmin.validate_ipv4_netmask('255.255.255.0') ) puts "/24 is valid" if ( IPAdmin.validate_ipv4_netmask(24) ) puts "/64 is valid" if ( IPAdmin.validate_ipv6_netmask(64) )
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24') cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/25') cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.50') cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/10') cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/64') print "\n"
compare
puts "compare" comp1 = IPAdmin.compare(cidr4_1,cidr4_2) comp2 = IPAdmin.compare(cidr6_1,cidr6_2) puts "#(comp1[0])(comp1[0]).desc is the supernet of #(comp1[1])(comp1[1]).desc" puts "#(comp2[0])(comp2[0]).desc is the supernet of #(comp2[1])(comp2[1]).desc"
cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24') cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.0.0/24') cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/128') cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::1/128') print "\n"
range
puts "range" list = IPAdmin.range(:Boundaries => [cidr4_1,cidr4_3], :Bitstep => 20 ) puts "ip's between #cidr4_1cidr4_1.base and #cidr4_3cidr4_3.base (bitstep of 20)" list.each do |x| puts " #x" end print "\n"
arpa
puts "arpa" puts "arpa for #cidr4_1cidr4_1.desc() is #IPAdmin.arpa(cidr4_1)" puts "arpa for #cidr6_1cidr6_1.desc() is #IPAdmin.arpa(cidr6_1)" print "\n"
shorten
puts "shorten" puts "shorthand notation for #cidr6_1cidr6_1.network() is #IPAdmin.shorten(cidr6_1.network)" print "\n"
unshorten
puts "unshorten"
- puts "expanded notation for fec0
is #IPAdmin.unshorten('fec0::')"
#=====================================#
#=====================================#