From 2c538fe9c068b9bf3e722b9a3984f2fea43f577e Mon Sep 17 00:00:00 2001 From: HD Moore Date: Sat, 10 Dec 2011 20:10:10 -0600 Subject: [PATCH] Rework RangeWalker and some of the socket API to fix bugs and generally handle ranges the right way --- lib/rex/socket.rb | 10 ++-------- lib/rex/socket/range_walker.rb | 17 +++++++++++------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/rex/socket.rb b/lib/rex/socket.rb index 96ea8c944c..0cbc967e96 100644 --- a/lib/rex/socket.rb +++ b/lib/rex/socket.rb @@ -119,20 +119,14 @@ module Socket # Determine whether this is an IPv4 address # def self.is_ipv4?(addr) - return false if addr =~ MATCH_IPV6 - return true if addr =~ MATCH_IPV4 - res = Rex::Socket.getaddress(addr, true) - res.match(/:/) ? false : true + ( addr =~ MATCH_IPV4 ) ? true : false end # # Determine whether this is an IPv6 address # def self.is_ipv6?(addr) - return true if addr =~ MATCH_IPV6 - return false if addr =~ MATCH_IPV4 - res = Rex::Socket.getaddress(addr, true) - res.match(/:/) ? true : false + ( addr =~ MATCH_IPV6 ) ? true : false end # diff --git a/lib/rex/socket/range_walker.rb b/lib/rex/socket/range_walker.rb index 2a4c55c322..c07e2099ae 100644 --- a/lib/rex/socket/range_walker.rb +++ b/lib/rex/socket/range_walker.rb @@ -102,7 +102,7 @@ class RangeWalker expanded = expand_cidr(arg) if expanded - ranges.push [ expanded[0], expanded[1], false, {} ] + ranges.push(expanded) else return false end @@ -125,11 +125,10 @@ class RangeWalker return false end else + # Returns an array of ranges expanded = expand_nmap(arg) if expanded - ranges.push [ expanded[0], expanded[1], false, {} ] - else - return false + expanded.each { |r| ranges.push(r) } end end } @@ -147,7 +146,6 @@ class RangeWalker return false if not valid? @curr_range = 0 @curr_addr = @ranges[0][0] - @length = 0 @ranges.each { |r| @length += r[1] - r[0] + 1 } end @@ -234,8 +232,9 @@ class RangeWalker range.start = Rex::Socket.addr_atoi(start) range.stop = Rex::Socket.addr_atoi(stop) range.ipv6 = (arg.include?(":")) + range.options = {} - return [range] + return range end # @@ -343,8 +342,12 @@ class RangeWalker addrs.sort! addrs.uniq! + rng = Range.new + rng.ipv6 = false + rng.options = {} rng.start = addrs[0] + ranges = [] 1.upto(addrs.length - 1) do |idx| if addrs[idx - 1] + 1 == addrs[idx] @@ -378,9 +381,11 @@ class Range < Array # :nodoc: all def start; self[0]; end def stop; self[1]; end def ipv6; self[2]; end + def options; self[3]; end def start=(val); self[0] = val; end def stop=(val); self[1] = val; end def ipv6=(val); self[2] = val; end + def options=(val); self[3] = val; end end end