metasploit-framework/lib/rex/post/meterpreter/packet_parser.rb

62 lines
1012 B
Ruby

# -*- coding: binary -*-
module Rex
module Post
module Meterpreter
###
#
# This class is responsible for reading in and decrypting meterpreter
# packets that arrive on a socket
#
###
class PacketParser
#
# Initializes the packet parser context.
#
def initialize
reset
end
#
# Resets the parser state so that a new packet can begin being parsed.
#
def reset
self.packet = Packet.new(0)
end
#
# Reads data from the socket and parses as much of the packet as possible.
#
def recv(sock)
raw = nil
if self.packet.raw_bytes_required > 0
while (raw = sock.read(self.packet.raw_bytes_required))
self.packet.add_raw(raw)
break if self.packet.raw_bytes_required == 0
end
end
if self.packet.raw_bytes_required > 0
if raw == nil
raise EOFError
else
return nil
end
end
packet = self.packet
reset
packet
end
protected
attr_accessor :cipher, :packet # :nodoc:
end
end; end; end