diff --git a/core/filters/base.rb b/core/filters/base.rb
index 2230c3a63..ff26bd47a 100644
--- a/core/filters/base.rb
+++ b/core/filters/base.rb
@@ -99,45 +99,42 @@ module Filters
only?("a-zA-Z0-9", str)
end
- # @overload self.is_valid_ip?(version, ip)
+ # @overload self.is_valid_ip?(ip, version)
# Checks if the given string is a valid IP address
- # @param [Symbol] version IP version (either :ipv4 or :ipv6)
# @param [String] ip string to be tested
+ # @param [Symbol] version IP version (either :ipv4 or :ipv6)
# @return [Boolean] true if the string is a valid IP address, otherwise false
#
# @overload self.is_valid_ip?(ip)
# Checks if the given string is either a valid IPv4 or IPv6 address
# @param [String] ip string to be tested
# @return [Boolean] true if the string is a valid IPv4 or IPV6 address, otherwise false
- def self.is_valid_ip?(version = :both, ip)
- valid = false
-
- if is_non_empty_string?(ip)
- valid = case version.inspect.downcase
- when /^:ipv4$/
- ip =~ /^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}
- (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$/x
- when /^:ipv6$/
- ip =~ /^(([0-9a-f]{1,4}:){7,7}[0-9a-f]{1,4}|
- ([0-9a-f]{1,4}:){1,7}:|
- ([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}|
- ([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}|
- ([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}|
- ([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}|
- ([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}|
- [0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})|
- :((:[0-9a-f]{1,4}){1,7}|:)|
- fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-z]{1,}|
- ::(ffff(:0{1,4}){0,1}:){0,1}
- ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}
- (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|
- ([0-9a-f]{1,4}:){1,4}:
- ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}
- (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/ix
- when /^:both$/
- is_valid_ip?(:ipv4, ip) || is_valid_ip?(:ipv6, ip)
- end ? true : false
- end
+ def self.is_valid_ip?(ip, version = :both)
+ return false unless is_non_empty_string?(ip)
+ valid = case version.inspect.downcase
+ when /^:ipv4$/
+ ip =~ /^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}
+ (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$/x
+ when /^:ipv6$/
+ ip =~ /^(([0-9a-f]{1,4}:){7,7}[0-9a-f]{1,4}|
+ ([0-9a-f]{1,4}:){1,7}:|
+ ([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}|
+ ([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}|
+ ([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}|
+ ([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}|
+ ([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}|
+ [0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})|
+ :((:[0-9a-f]{1,4}){1,7}|:)|
+ fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-z]{1,}|
+ ::(ffff(:0{1,4}){0,1}:){0,1}
+ ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}
+ (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|
+ ([0-9a-f]{1,4}:){1,4}:
+ ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}
+ (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/ix
+ when /^:both$/
+ is_valid_ip?(ip, :ipv4) || is_valid_ip?(ip, :ipv6)
+ end ? true : false
valid
end
diff --git a/extensions/dns/model.rb b/extensions/dns/model.rb
index d4f86ed77..da78c46a2 100644
--- a/extensions/dns/model.rb
+++ b/extensions/dns/model.rb
@@ -51,7 +51,7 @@ module BeEF
sym_regex = /^:?(NoError|FormErr|ServFail|NXDomain|NotImp|Refused|NotAuth)$/i
src = if resource == Resolv::DNS::Resource::IN::A
- if response.is_a?(String) && BeEF::Filters.is_valid_ip?(:ipv4, response)
+ if response.is_a?(String) && BeEF::Filters.is_valid_ip?(response, :ipv4)
sprintf "t.respond!('%s')", response
elsif (response.is_a?(Symbol) && response.to_s =~ sym_regex) || response =~ sym_regex
sprintf "t.fail!(:%s)", response.to_sym
@@ -60,7 +60,7 @@ module BeEF
str2 = ''
response.each do |r|
- raise InvalidDnsResponseError, 'A' unless BeEF::Filters.is_valid_ip?(:ipv4, r)
+ raise InvalidDnsResponseError, 'A' unless BeEF::Filters.is_valid_ip?(r, :ipv4)
str2 << sprintf(str1, r)
end
@@ -69,7 +69,7 @@ module BeEF
raise InvalidDnsResponseError, 'A'
end
elsif resource == Resolv::DNS::Resource::IN::AAAA
- if response.is_a?(String) && BeEF::Filters.is_valid_ip?(:ipv6, response)
+ if response.is_a?(String) && BeEF::Filters.is_valid_ip?(response, :ipv6)
sprintf "t.respond!('%s')", response
elsif (response.is_a?(Symbol) && response.to_s =~ sym_regex) || response =~ sym_regex
sprintf "t.fail!(:%s)", response.to_sym
@@ -78,7 +78,7 @@ module BeEF
str2 = ''
response.each do |r|
- raise InvalidDnsResponseError, 'AAAA' unless BeEF::Filters.is_valid_ip?(:ipv6, r)
+ raise InvalidDnsResponseError, 'AAAA' unless BeEF::Filters.is_valid_ip?(r, :ipv6)
str2 << sprintf(str1, r)
end