38 lines
827 B
Ruby
38 lines
827 B
Ruby
# -*- coding: binary -*-
|
|
|
|
module Msf
|
|
|
|
###
|
|
#
|
|
# Network address option.
|
|
#
|
|
###
|
|
class OptAddress < OptBase
|
|
def type
|
|
return 'address'
|
|
end
|
|
|
|
def valid?(value)
|
|
return false if empty_required_value?(value)
|
|
return false unless value.kind_of?(String) or value.kind_of?(NilClass)
|
|
|
|
if (value != nil and value.empty? == false)
|
|
begin
|
|
getaddr_result = ::Rex::Socket.getaddress(value, true)
|
|
# Covers a wierdcase where an incomplete ipv4 address will have it's
|
|
# missing octets filled in with 0's. (e.g 192.168 become 192.0.0.168)
|
|
# which does not feel like a legit behaviour
|
|
if value =~ /^\d{1,3}(\.\d{1,3}){1,3}$/
|
|
return false unless value =~ Rex::Socket::MATCH_IPV4
|
|
end
|
|
rescue
|
|
return false
|
|
end
|
|
end
|
|
|
|
return super
|
|
end
|
|
end
|
|
|
|
end
|