2009-12-04 19:37:14 +00:00
|
|
|
$:.push("../../lib")
|
|
|
|
require 'rex'
|
|
|
|
require 'rex/socket'
|
|
|
|
require 'rex/socket/range_walker'
|
|
|
|
|
|
|
|
describe Rex::Socket::RangeWalker do
|
2009-12-09 21:31:29 +00:00
|
|
|
it "should have a num_ips attribute" do
|
2010-05-03 17:13:09 +00:00
|
|
|
walker = Rex::Socket::RangeWalker.new("")
|
2009-12-09 21:31:29 +00:00
|
|
|
walker.should respond_to("num_ips")
|
|
|
|
walker.should respond_to("length")
|
|
|
|
walker.num_ips.should == walker.length
|
|
|
|
end
|
2009-12-04 19:55:58 +00:00
|
|
|
it "should handle single ipv6 addresses" do
|
2010-05-03 17:13:09 +00:00
|
|
|
walker = Rex::Socket::RangeWalker.new("::1")
|
2009-12-04 19:55:58 +00:00
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 1
|
|
|
|
end
|
2009-12-04 19:37:14 +00:00
|
|
|
it "should handle ranges" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1-2")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2
|
|
|
|
walker.next_ip.should == "10.1.1.1"
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1-2.1.1-2")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 4
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1-2.3-4.5-6")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 8
|
|
|
|
walker.should include("10.1.3.5")
|
|
|
|
# Slow test on a 3.06 GHz proc
|
|
|
|
# ruby 1.9, ~ 11 seconds
|
|
|
|
# ruby 1.8.7, ~ 24 seconds
|
|
|
|
# ruby 1.8.6, ~ 23 seconds
|
|
|
|
#walker = Rex::Socket::RangeWalker.new("10.0-255.0-255.0-255")
|
|
|
|
#walker.should be_valid
|
|
|
|
#walker.length.should == 256 * 256 * 256
|
|
|
|
end
|
|
|
|
it "should default the lower bound of a range to 0" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.3.-17")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 18
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.3.-255")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 256
|
|
|
|
end
|
|
|
|
it "should default the upper bound of a range to 255" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.3.254-")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2
|
|
|
|
end
|
|
|
|
it "should handle lists" do
|
|
|
|
#walker = Rex::Socket::RangeWalker.new("10.1.1.1,2")
|
|
|
|
#walker.should be_valid
|
|
|
|
#walker.length.should == 2
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 1
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1,3")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2
|
|
|
|
walker.should_not include("10.1.1.2")
|
|
|
|
end
|
|
|
|
it "should handle ranges and lists together" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1-2,3")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 3
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1-2.1.1,2")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 4
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1,2.3,4.5,6")
|
|
|
|
walker.length.should == 8
|
|
|
|
end
|
|
|
|
it "should handle cidr" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/31")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/30")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 4
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/29")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 8
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/28")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 16
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/27")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 32
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/26")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 64
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/25")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 128
|
|
|
|
pending("Decide whether cidr_crack should include 0")
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/24")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 256
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1/23")
|
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 512
|
|
|
|
end
|
|
|
|
|
2009-12-04 20:17:28 +00:00
|
|
|
it "should handle ipv6 cidr" do
|
2010-05-03 17:13:09 +00:00
|
|
|
walker = Rex::Socket::RangeWalker.new("::1/127")
|
2009-12-04 20:17:28 +00:00
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2
|
2010-05-03 17:13:09 +00:00
|
|
|
walker = Rex::Socket::RangeWalker.new("::1/122")
|
2009-12-04 20:17:28 +00:00
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2 ** 6
|
2010-05-03 17:13:09 +00:00
|
|
|
walker = Rex::Socket::RangeWalker.new("::1/116")
|
2009-12-04 20:17:28 +00:00
|
|
|
walker.should be_valid
|
|
|
|
walker.length.should == 2 ** 12
|
|
|
|
end
|
|
|
|
|
|
|
|
#it "should handle ipv6 ranges" do
|
|
|
|
# pending("Need to define how this should be handled")
|
2010-05-03 17:13:09 +00:00
|
|
|
# walker = Rex::Socket::RangeWalker.new("::1-::1:1")
|
2009-12-04 20:17:28 +00:00
|
|
|
# walker.should be_valid
|
|
|
|
# walker.length.should == 2 ** 16
|
|
|
|
#end
|
|
|
|
|
2009-12-04 19:37:14 +00:00
|
|
|
it "should yield all ips" do
|
|
|
|
walker = Rex::Socket::RangeWalker.new("10.1.1.1,2,3")
|
|
|
|
got = []
|
|
|
|
walker.each { |ip|
|
|
|
|
got.push ip
|
|
|
|
}
|
|
|
|
got.should == ["10.1.1.1", "10.1.1.2", "10.1.1.3"]
|
|
|
|
end
|
|
|
|
end
|