Permalink
Browse files

Add IPv6 range support, permission tweak

  • Loading branch information...
1 parent 0bbbcd5 commit 72f64583e24db885b139d755360f942029c06449 HD Moore committed Dec 6, 2011
Showing with 26 additions and 10 deletions.
  1. +26 −10 lib/rex/socket/range_walker.rb
@@ -53,7 +53,28 @@ def parse(parseme)
return nil if not parseme
ranges = []
parseme.split(', ').map{ |a| a.split(' ') }.flatten.each { |arg|
- if arg.include?("/")
+
+ # Handle IPv6 first (support ranges, but not CIDR)
+ if arg.include?(":")
+ addrs = arg.split('-', 2)
+
+ # Handle a single address
+ if addrs.length == 1
+ # IPv6 ranges are not yet supported (or useful)
+ return false unless Rex::Socket.is_ipv6?(arg)
+
+ addr = Rex::Socket.addr_atoi(arg)
+ ranges.push [addr, addr, true]
+ end
+
+ # Handle IPv6 ranges in the form of 2001::1-2001::10
+ return false if not (Rex::Socket.is_ipv6?(addrs[0]) and Rex::Socket.is_ipv6?(addrs[1]))
+ addr1 = Rex::Socket.addr_atoi(addrs[0])
+ addr2 = Rex::Socket.addr_atoi(addrs[1])
+ ranges.push [addr1, addr2, true]
+
+ # Handle IPv4 CIDR
+ elsif arg.include?("/")
# Then it's CIDR notation and needs special case
return false if arg =~ /[,-]/ # Improper CIDR notation (can't mix with 1,3 or 1-3 style IP ranges)
return false if arg.scan("/").size > 1 # ..but there are too many slashes
@@ -72,20 +93,15 @@ def parse(parseme)
ranges += expanded
else
return false
- end
-
- elsif arg.include?(":")
- # IPv6 ranges are not yet supported (or useful)
- return false unless Rex::Socket.is_ipv6?(arg)
-
- addr = Rex::Socket.addr_atoi(arg)
- ranges.push [addr, addr, true]
+ end
+ # Handle hostnames
elsif arg =~ /[^-0-9,.*]/
# Then it's a domain name and we should send it on to addr_atoi
# unmolested to force a DNS lookup.
Rex::Socket.addr_atoi_list(arg).each { |addr| ranges.push [addr, addr] }
-
+
+ # Handle IPv4 ranges
elsif arg =~ /^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})-([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/
# Then it's in the format of 1.2.3.4-5.6.7.8
# Note, this will /not/ deal with DNS names, or the fancy/obscure 10...1-10...2

0 comments on commit 72f6458

Please sign in to comment.