Rework RangeWalker and some of the socket API to fix bugs and generally

handle ranges the right way
This commit is contained in:
HD Moore 2011-12-10 20:10:10 -06:00
parent dee053cd71
commit 2c538fe9c0
2 changed files with 13 additions and 14 deletions

View File

@ -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
#

View File

@ -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