Files
metasploit-gs/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb
T
Ramon de C Valle f124597a56 Code cleanups
git-svn-id: file:///home/svn/framework3/trunk@5773 4d416f70-5f16-0410-b530-b9f4589650da
2008-10-19 21:03:39 +00:00

144 lines
2.7 KiB
Ruby

#!/usr/bin/env ruby
require 'rex/post/meterpreter/extensions/stdapi/tlv'
require 'rex/post/meterpreter/extensions/stdapi/net/route'
require 'rex/post/meterpreter/extensions/stdapi/net/interface'
module Rex
module Post
module Meterpreter
module Extensions
module Stdapi
module Net
###
#
# This class provides an interface to the network configuration
# that exists on the remote machine, such as interfaces, and
# routes.
#
###
class Config
##
#
# Constructor
#
##
#
# Initializes a Config instance that is used to get information about the
# network configuration of the remote machine.
#
def initialize(client)
self.client = client
end
##
#
# Interfaces
#
##
#
# Enumerates each interface.
#
def each_interface(&block)
get_interfaces().each(&block)
end
#
# Returns an array of network interfaces with each element.
#
# being an Interface
def get_interfaces
request = Packet.create_request('stdapi_net_config_get_interfaces')
ifaces = []
response = client.send_request(request)
response.each(TLV_TYPE_NETWORK_INTERFACE) { |iface|
ifaces << Interface.new(
iface.get_tlv_value(TLV_TYPE_IP),
iface.get_tlv_value(TLV_TYPE_NETMASK),
iface.get_tlv_value(TLV_TYPE_MAC_ADDRESS),
iface.get_tlv_value(TLV_TYPE_MAC_NAME))
}
return ifaces
end
alias interfaces get_interfaces
##
#
# Routing
#
##
#
# Enumerates each route.
#
def each_route(&block)
get_routes().each(&block)
end
#
# Returns an array of routes with each element being a Route.
#
def get_routes
request = Packet.create_request('stdapi_net_config_get_routes')
routes = []
response = client.send_request(request)
# Build out the array of 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))
}
return routes
end
alias routes get_routes
#
# Adds a route to the target machine.
#
def add_route(subnet, netmask, gateway)
request = Packet.create_request('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)
response = client.send_request(request)
return true
end
#
# Removes a route from the target machine.
#
def remove_route(subnet, netmask, gateway)
request = Packet.create_request('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)
response = client.send_request(request)
return true
end
protected
attr_accessor :client # :nodoc:
end
end; end; end; end; end; end