PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/spec/lib/rex/socket/range_walker_spec.rb

https://bitbucket.org/technopunk2099/metasploit-framework
Ruby | 104 lines | 91 code | 10 blank | 3 comment | 20 complexity | caf219d5d0f21d738691eea7ba3b7e74 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, LGPL-2.1, GPL-2.0, MIT
  1. require 'rex/socket/range_walker'
  2. describe Rex::Socket::RangeWalker do
  3. it "should have a num_ips attribute" do
  4. walker = Rex::Socket::RangeWalker.new("")
  5. walker.should respond_to("num_ips")
  6. walker.should respond_to("length")
  7. walker.num_ips.should == walker.length
  8. end
  9. it "should handle single ipv6 addresses" do
  10. walker = Rex::Socket::RangeWalker.new("::1")
  11. walker.should be_valid
  12. walker.length.should == 1
  13. end
  14. it "should handle ranges" do
  15. walker = Rex::Socket::RangeWalker.new("10.1.1.1-2")
  16. walker.should be_valid
  17. walker.length.should == 2
  18. walker.next_ip.should == "10.1.1.1"
  19. walker = Rex::Socket::RangeWalker.new("10.1-2.1.1-2")
  20. walker.should be_valid
  21. walker.length.should == 4
  22. walker = Rex::Socket::RangeWalker.new("10.1-2.3-4.5-6")
  23. walker.should be_valid
  24. walker.length.should == 8
  25. walker.should include("10.1.3.5")
  26. end
  27. it "should default the lower bound of a range to 0" do
  28. walker = Rex::Socket::RangeWalker.new("10.1.3.-17")
  29. walker.should be_valid
  30. walker.length.should == 18
  31. walker = Rex::Socket::RangeWalker.new("10.1.3.-255")
  32. walker.should be_valid
  33. walker.length.should == 256
  34. end
  35. it "should default the upper bound of a range to 255" do
  36. walker = Rex::Socket::RangeWalker.new("10.1.3.254-")
  37. walker.should be_valid
  38. walker.length.should == 2
  39. end
  40. it "should take * to mean 0-255" do
  41. walker = Rex::Socket::RangeWalker.new("10.1.3.*")
  42. walker.should be_valid
  43. walker.length.should == 256
  44. walker.next_ip.should == "10.1.3.0"
  45. walker.should include("10.1.3.255")
  46. walker = Rex::Socket::RangeWalker.new("10.1.*.3")
  47. walker.should be_valid
  48. walker.length.should == 256
  49. walker.next_ip.should == "10.1.0.3"
  50. walker.should include("10.1.255.3")
  51. end
  52. it "should handle lists" do
  53. #walker = Rex::Socket::RangeWalker.new("10.1.1.1,2")
  54. #walker.should be_valid
  55. #walker.length.should == 2
  56. walker = Rex::Socket::RangeWalker.new("10.1.1.1")
  57. walker.should be_valid
  58. walker.length.should == 1
  59. walker = Rex::Socket::RangeWalker.new("10.1.1.1,3")
  60. walker.should be_valid
  61. walker.length.should == 2
  62. walker.should_not include("10.1.1.2")
  63. end
  64. it "should produce the same ranges with * and 0-255" do
  65. a = Rex::Socket::RangeWalker.new("10.1.3.*")
  66. b = Rex::Socket::RangeWalker.new("10.1.3.0-255")
  67. a.ranges.should eq(b.ranges)
  68. end
  69. it "should handle ranges and lists together" do
  70. walker = Rex::Socket::RangeWalker.new("10.1.1.1-2,3")
  71. walker.should be_valid
  72. walker.length.should == 3
  73. walker = Rex::Socket::RangeWalker.new("10.1-2.1.1,2")
  74. walker.should be_valid
  75. walker.length.should == 4
  76. walker = Rex::Socket::RangeWalker.new("10.1,2.3,4.5,6")
  77. walker.length.should == 8
  78. end
  79. it "should handle cidr" do
  80. 31.downto 16 do |bits|
  81. walker = Rex::Socket::RangeWalker.new("10.1.1.1/#{bits}")
  82. walker.should be_valid
  83. walker.length.should == (2**(32-bits))
  84. end
  85. end
  86. it "should yield all ips" do
  87. walker = Rex::Socket::RangeWalker.new("10.1.1.1,2,3")
  88. got = []
  89. walker.each { |ip|
  90. got.push ip
  91. }
  92. got.should == ["10.1.1.1", "10.1.1.2", "10.1.1.3"]
  93. end
  94. end