Files
metasploit-gs/lib/msf/core/opt_address_local.rb
T
2018-05-24 18:49:36 -05:00

45 lines
922 B
Ruby

# -*- coding: binary -*-
require 'network_interface'
module Msf
###
#
# Local network address option.
#
###
class OptAddressLocal < OptAddress
def interfaces
NetworkInterface.interfaces || []
end
def normalize(value)
return unless value.kind_of?(String)
return value unless interfaces.include?(value)
addrs = NetworkInterface.addresses(value).values.flatten
# Strip interface name from address (see getifaddrs(3))
addrs = addrs.map { |x| x['addr'].split('%').first }.select do |addr|
begin
IPAddr.new(addr)
rescue IPAddr::InvalidAddressError
false
end
end
addrs.any? ? addrs.first : ''
end
def valid?(value, check_empty: true)
return false if check_empty && empty_required_value?(value)
return false unless value.kind_of?(String) || value.kind_of?(NilClass)
return true if interfaces.include?(value)
super
end
end
end