Class: Rex::Post::Meterpreter::Stream
- Includes:
- IO::StreamAbstraction
- Defined in:
- lib/rex/post/meterpreter/channels/stream.rb
Overview
Stream
This class represents a channel that is streaming. This means that sequential data is flowing in either one or both directions.
Direct Known Subclasses
Instance Attribute Summary
Attributes included from IO::StreamAbstraction
Attributes inherited from Channel
#cid, #client, #cls, #flags, #params, #type
Class Method Summary collapse
Instance Method Summary collapse
-
#cleanup ⇒ Object
Cleans up the stream abstraction.
-
#dio_close_handler(packet) ⇒ Object
Performs a close operation on the right side of the local stream.
-
#dio_write_handler(packet, data) ⇒ Object
Performs a write operation on the right side of the local stream.
-
#initialize(client, cid, type, flags) ⇒ Stream
constructor
Passes the initialization information up to the base class.
Methods included from IO::StreamAbstraction
#cleanup_abstraction, #close, #initialize_abstraction, #localinfo, #peerinfo, #shutdown, #sysread, #syswrite
Methods inherited from Channel
_close, #_close, #_read, #_write, #close, #close_read, #close_write, create, #dio_handler, #dio_map, #dio_read_handler, finalize, #flag?, #interactive, #read, request_handler, #synchronous?, #write
Methods included from InboundPacketHandler
#request_handler, #response_handler
Constructor Details
#initialize(client, cid, type, flags) ⇒ Stream
Passes the initialization information up to the base class
38 39 40 41 42 43 44 45 |
# File 'lib/rex/post/meterpreter/channels/stream.rb', line 38 def initialize(client, cid, type, flags) # sf: initialize_abstraction() before super() as we can get a scenario where dio_write_handler() is called # with data to write to the rsock but rsock has not yet been initialized. This happens if the channel # is registered (client.add_channel(self) in Channel.initialize) to a session and a 'core_channel_write' # request comes in before we have called self.initialize_abstraction() initialize_abstraction super(client, cid, type, flags) end |
Class Method Details
.cls ⇒ Object
24 25 26 |
# File 'lib/rex/post/meterpreter/channels/stream.rb', line 24 def cls return CHANNEL_CLASS_STREAM end |
Instance Method Details
#cleanup ⇒ Object
Cleans up the stream abstraction.
78 79 80 81 82 |
# File 'lib/rex/post/meterpreter/channels/stream.rb', line 78 def cleanup super cleanup_abstraction end |
#dio_close_handler(packet) ⇒ Object
Performs a close operation on the right side of the local stream.
69 70 71 72 73 |
# File 'lib/rex/post/meterpreter/channels/stream.rb', line 69 def dio_close_handler(packet) rsock.close return super(packet) end |
#dio_write_handler(packet, data) ⇒ Object
Performs a write operation on the right side of the local stream.
56 57 58 59 60 61 62 63 64 |
# File 'lib/rex/post/meterpreter/channels/stream.rb', line 56 def dio_write_handler(packet, data) rv = Rex::ThreadSafe.select(nil, [rsock], nil, 0.01) if(rv) rsock.write(data) return true else return false end end |