Class: Rex::Post::Meterpreter::Extensions::Stdapi::Net::Config
- Inherits:
-
Object
- Object
- Rex::Post::Meterpreter::Extensions::Stdapi::Net::Config
- Defined in:
- lib/rex/post/meterpreter/extensions/stdapi/net/config.rb
Overview
This class provides an interface to the network configuration that exists on the remote machine, such as interfaces, and routes.
Instance Attribute Summary collapse
-
#client ⇒ Object
protected
:nodoc:.
Instance Method Summary collapse
-
#add_route(subnet, netmask, gateway) ⇒ Object
Adds a route to the target machine.
-
#each_interface(&block) ⇒ Object
Enumerates each interface.
-
#each_route(&block) ⇒ Object
Enumerates each route.
-
#get_arp_table ⇒ Object
(also: #arp_table)
Returns an array of arp entries with each element being an Arp.
-
#get_interfaces ⇒ Array<Interface>
(also: #interfaces)
Returns an array of network interfaces with each element.
-
#get_netstat ⇒ Object
(also: #netstat)
Returns an array of network connection entries with each element being a Netstat.
-
#get_proxy_config ⇒ Object
Gets the current proxy configuration.
-
#get_routes ⇒ Object
(also: #routes)
Returns an array of routes with each element being a Route.
-
#initialize(client) ⇒ Config
constructor
Initializes a Config instance that is used to get information about the network configuration of the remote machine.
-
#remove_route(subnet, netmask, gateway) ⇒ Object
Removes a route from the target machine.
Constructor Details
#initialize(client) ⇒ Config
Initializes a Config instance that is used to get information about the network configuration of the remote machine.
35 36 37 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 35 def initialize(client) self.client = client end |
Instance Attribute Details
#client ⇒ Object (protected)
:nodoc:
252 253 254 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 252 def client @client end |
Instance Method Details
#add_route(subnet, netmask, gateway) ⇒ Object
Adds a route to the target machine.
205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 205 def add_route(subnet, netmask, gateway) request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_ADD_ROUTE) request.add_tlv(TLV_TYPE_SUBNET_STRING, subnet) request.add_tlv(TLV_TYPE_NETMASK_STRING, netmask) request.add_tlv(TLV_TYPE_GATEWAY_STRING, gateway) client.send_request(request) return true end |
#each_interface(&block) ⇒ Object
Enumerates each interface.
48 49 50 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 48 def each_interface(&block) get_interfaces().each(&block) end |
#each_route(&block) ⇒ Object
Enumerates each route.
173 174 175 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 173 def each_route(&block) get_routes().each(&block) end |
#get_arp_table ⇒ Object Also known as: arp_table
Returns an array of arp entries with each element being an Arp.
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 150 def get_arp_table request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_GET_ARP_TABLE) arps = [] response = client.send_request(request) # Build out the array of arp response.each(TLV_TYPE_ARP_ENTRY) { |arp| arps << Arp.new( :ip_addr => arp.get_tlv_value(TLV_TYPE_IP), :mac_addr => arp.get_tlv_value(TLV_TYPE_MAC_ADDRESS), :interface => arp.get_tlv_value(TLV_TYPE_MAC_NAME) ) } return arps end |
#get_interfaces ⇒ Array<Interface> Also known as: interfaces
Returns an array of network interfaces with each element.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 55 def get_interfaces request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_GET_INTERFACES) ifaces = [] response = client.send_request(request) response.each(TLV_TYPE_NETWORK_INTERFACE) { |iface| addrs = [] netmasks = [] scopes = [] while (a = iface.get_tlv_value(TLV_TYPE_IP, addrs.length)) # Netmasks aren't tightly associated with addresses, they're # just thrown all together in the interface TLV ordered to # match up. This could be done better by creating another # GroupTlv type for addresses containing an address, a netmask, # and possibly a scope. n = iface.get_tlv_value(TLV_TYPE_NETMASK, addrs.length) if (n.nil?) # Some systems can't report a netmask, only a network # prefix, so figure out the netmask from that. n = iface.get_tlv_value(TLV_TYPE_IP_PREFIX, addrs.length) if n n = Rex::Socket.bit2netmask(n, !!(a.length == 16)) end else n = Rex::Socket.addr_ntoa(n) end s = iface.get_tlv_value(TLV_TYPE_IP6_SCOPE, addrs.length) scopes[addrs.length] = s if s netmasks[addrs.length] = n if n addrs << Rex::Socket.addr_ntoa(a) end ifaces << Interface.new( :index => iface.get_tlv_value(TLV_TYPE_INTERFACE_INDEX), :mac_addr => iface.get_tlv_value(TLV_TYPE_MAC_ADDRESS), :mac_name => iface.get_tlv_value(TLV_TYPE_MAC_NAME), :mtu => iface.get_tlv_value(TLV_TYPE_INTERFACE_MTU), :flags => iface.get_tlv_value(TLV_TYPE_INTERFACE_FLAGS), :addrs => addrs, :netmasks => netmasks, :scopes => scopes ) } return ifaces end |
#get_netstat ⇒ Object Also known as: netstat
Returns an array of network connection entries with each element being a Netstat.
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 114 def get_netstat request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_GET_NETSTAT) netstat = [] response = client.send_request(request) # Build out the array of netstat response.each(TLV_TYPE_NETSTAT_ENTRY) { |connection| netstat << Netstat.new( :local_addr => connection.get_tlv_value(TLV_TYPE_LOCAL_HOST_RAW), :remote_addr => connection.get_tlv_value(TLV_TYPE_PEER_HOST_RAW), :local_port => connection.get_tlv_value(TLV_TYPE_LOCAL_PORT), :remote_port => connection.get_tlv_value(TLV_TYPE_PEER_PORT), :protocol => connection.get_tlv_value(TLV_TYPE_MAC_NAME), # tcp/tcp6/udp/udp6 :state => connection.get_tlv_value(TLV_TYPE_SUBNET_STRING), :uid => connection.get_tlv_value(TLV_TYPE_PID), :inode => connection.get_tlv_value(TLV_TYPE_ROUTE_METRIC), :pid_name => connection.get_tlv_value(TLV_TYPE_PROCESS_NAME) ) } return netstat end |
#get_proxy_config ⇒ Object
Gets the current proxy configuration
235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 235 def get_proxy_config() request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_GET_PROXY) response = client.send_request(request) proxy_config = { :autodetect => response.get_tlv_value(TLV_TYPE_PROXY_CFG_AUTODETECT), :autoconfigurl => response.get_tlv_value(TLV_TYPE_PROXY_CFG_AUTOCONFIGURL), :proxy => response.get_tlv_value(TLV_TYPE_PROXY_CFG_PROXY), :proxybypass => response.get_tlv_value(TLV_TYPE_PROXY_CFG_PROXYBYPASS) } return proxy_config end |
#get_routes ⇒ Object Also known as: routes
Returns an array of routes with each element being a Route.
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 180 def get_routes request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_GET_ROUTES) routes = [] response = client.send_request(request) # Build out the array of routes # Note: This will include both IPv4 and IPv6 routes response.each(TLV_TYPE_NETWORK_ROUTE) { |route| routes << Route.new( route.get_tlv_value(TLV_TYPE_SUBNET), route.get_tlv_value(TLV_TYPE_NETMASK), route.get_tlv_value(TLV_TYPE_GATEWAY), route.get_tlv_value(TLV_TYPE_STRING), route.get_tlv_value(TLV_TYPE_ROUTE_METRIC)) } return routes end |
#remove_route(subnet, netmask, gateway) ⇒ Object
Removes a route from the target machine.
220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/net/config.rb', line 220 def remove_route(subnet, netmask, gateway) request = Packet.create_request(COMMAND_ID_STDAPI_NET_CONFIG_REMOVE_ROUTE) request.add_tlv(TLV_TYPE_SUBNET_STRING, subnet) request.add_tlv(TLV_TYPE_NETMASK_STRING, netmask) request.add_tlv(TLV_TYPE_GATEWAY_STRING, gateway) client.send_request(request) return true end |