Class: Msf::OptAddressRoutable
- Inherits:
-
OptAddress
- Object
- OptBase
- OptAddress
- Msf::OptAddressRoutable
- Defined in:
- lib/msf/core/opt_address_routable.rb
Overview
Routable network address option.
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from OptBase
#advanced, #aliases, #conditions, #default, #desc, #enums, #evasion, #fallbacks, #max_length, #name, #owner, #regex, #required
Instance Method Summary collapse
- #interfaces ⇒ Object
- #normalize(value) ⇒ Object
- #valid?(value, check_empty: true, datastore: nil) ⇒ Boolean
Methods inherited from OptAddress
Methods inherited from OptBase
#advanced?, #display_value, #empty_required_value?, #evasion?, #initialize, #invalid_value_length?, #required?, #type?, #validate_on_assignment?
Constructor Details
This class inherits a constructor from Msf::OptBase
Instance Method Details
#interfaces ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/msf/core/opt_address_routable.rb', line 11 def interfaces begin NetworkInterface.interfaces || [] rescue NetworkInterface::Error => e elog(e) [] end end |
#normalize(value) ⇒ Object
20 21 22 23 24 |
# File 'lib/msf/core/opt_address_routable.rb', line 20 def normalize(value) return unless value.kind_of?(String) return normalize_interface(value) if interfaces.include?(value) return normalize_ip_address(value) if Rex::Socket.is_ip_addr?(value) end |
#valid?(value, check_empty: true, datastore: nil) ⇒ Boolean
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/msf/core/opt_address_routable.rb', line 26 def valid?(value, check_empty: true, datastore: nil) 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) return false if Rex::Socket.is_ip_addr?(value) && Rex::Socket.addr_atoi(value) == 0 if Rex::Socket.is_ipv4?(value) ip_addr = IPAddr.new(value) return false if IPAddr.new('0.0.0.0/8').include? ip_addr # this network return false if IPAddr.new('224.0.0.0/4').include? ip_addr # multicast return false if IPAddr.new('240.0.0.0/4').include? ip_addr # reserved return false if IPAddr.new('255.255.255.255') == ip_addr # broadcast end super end |