This class represents a logical TCP client connection that is established from the remote machine and tunnelled through the established meterpreter connection, similar to an SSH port forward.
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 26 def cls return CHANNEL_CLASS_STREAM end
Passes the channel initialization information up to the base class.
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 126 def initialize( client, cid, type, flags ) super( client, cid, type, flags ) lsock.extend( SocketInterface ) lsock.extend( DirectChannelWrite ) lsock.channel = self rsock.extend( SocketInterface ) rsock.channel = self end
Opens a TCP client channel using the supplied parameters.
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 89 def TcpClientChannel.open(client, params) c = Channel.create(client, 'stdapi_net_tcp_client', self, CHANNEL_FLAG_SYNCHRONOUS, [ { 'type' => TLV_TYPE_PEER_HOST, 'value' => params.peerhost }, { 'type' => TLV_TYPE_PEER_PORT, 'value' => params.peerport }, { 'type' => TLV_TYPE_LOCAL_HOST, 'value' => params.localhost }, { 'type' => TLV_TYPE_LOCAL_PORT, 'value' => params.localport }, { 'type' => TLV_TYPE_CONNECT_RETRIES, 'value' => params.retries } ]) c.params = params c end
Wrap the _write() call in order to catch some common, but harmless Windows exceptions
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 166 def _write(*args) begin super(*args) rescue ::Rex::Post::Meterpreter::RequestError => e case e.code when 10000 .. 10100 raise ::Rex::ConnectionError.new end end end
Closes the write half of the connection.
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 141 def close_write return shutdown(1) end
Shutdown the connection
0 -> future reads 1 -> future sends 2 -> both
# File lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb, line 152 def shutdown(how = 1) request = Packet.create_request('stdapi_net_socket_tcp_shutdown') request.add_tlv(TLV_TYPE_SHUTDOWN_HOW, how) request.add_tlv(TLV_TYPE_CHANNEL_ID, self.cid) response = client.send_request(request) return true end
Generated with the Darkfish Rdoc Generator 2.