Path: blob/master/lib/rex/post/meterpreter/packet_parser.rb
19849 views
# -*- coding: binary -*-12module Rex3module Post4module Meterpreter56###7#8# This class is responsible for reading in and decrypting meterpreter9# packets that arrive on a socket10#11###12class PacketParser1314#15# Initializes the packet parser context.16#17def initialize18reset19end2021#22# Resets the parser state so that a new packet can begin being parsed.23#24def reset25self.packet = Packet.new(0)26end2728#29# Reads data from the socket and parses as much of the packet as possible.30#31def recv(sock)32raw = nil33if self.packet.raw_bytes_required > 034while (raw = sock.read(self.packet.raw_bytes_required))35self.packet.add_raw(raw)36break if self.packet.raw_bytes_required == 037end38end3940if self.packet.raw_bytes_required > 041if raw == nil42raise EOFError43else44return nil45end46end4748packet = self.packet49reset50packet51end5253protected54attr_accessor :cipher, :packet # :nodoc:5556end575859end; end; end60616263