Specs and code changes for OptAddress
handles wierness around Optaddress. Still need to address isues in optaddressRange FIXRM #7537bug/bundler_fix
parent
72df070b80
commit
27e2469d8e
|
@ -330,10 +330,17 @@ class OptAddress < OptBase
|
||||||
|
|
||||||
def valid?(value)
|
def valid?(value)
|
||||||
return false if empty_required_value?(value)
|
return false if empty_required_value?(value)
|
||||||
|
return false unless value.kind_of?(String)
|
||||||
|
|
||||||
if (value != nil and value.empty? == false)
|
if (value != nil and value.empty? == false)
|
||||||
begin
|
begin
|
||||||
::Rex::Socket.getaddress(value, true)
|
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}\.*){1,3}$/ and getaddr_result.gsub('.0','') == value
|
||||||
|
return false
|
||||||
|
end
|
||||||
rescue
|
rescue
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
# -*- coding:binary -*-
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'msf/core/option_container'
|
||||||
|
|
||||||
|
|
||||||
|
describe Msf::OptAddress do
|
||||||
|
subject{ Msf::OptAddress.new('RHOST', [true, 'The target address', '']) }
|
||||||
|
|
||||||
|
it 'should return a type of address' do
|
||||||
|
subject.type.should == 'address'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'the validator' do
|
||||||
|
it 'should return true for a valid ipv4 address' do
|
||||||
|
subject.valid?('192.168.1.1').should == true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return true for a valid ipv6 address' do
|
||||||
|
subject.valid?('2607:f0d0:1002:0051:0000:0000:0000:0004').should == true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return true for a valid compressed ipv6 address' do
|
||||||
|
subject.valid?('2607:f0d0:1002:51::4').should == true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return false for nil' do
|
||||||
|
subject.valid?(nil).should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return false for an empty string' do
|
||||||
|
subject.valid?('').should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return false for an incomplete ip4 address' do
|
||||||
|
subject.valid?('192.168.1').should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return false for a non-string value' do
|
||||||
|
subject.valid?(true).should == false
|
||||||
|
subject.valid?(50).should == false
|
||||||
|
subject.valid?([]).should == false
|
||||||
|
subject.valid?([1,2]).should == false
|
||||||
|
subject.valid?({}).should == false
|
||||||
|
subject.valid?({:foo => 'bar'}) == false
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue