Class: Rex::Post::Meterpreter::PacketParser

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/post/meterpreter/packet_parser.rb

Overview

This class is responsible for reading in and decrypting meterpreter packets that arrive on a socket

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePacketParser

Initializes the packet parser context.

[View source] [View on GitHub]

18
19
20
# File 'lib/rex/post/meterpreter/packet_parser.rb', line 18

def initialize
  reset
end

Instance Attribute Details

#cipherObject (protected)

:nodoc:

[View on GitHub]

55
56
57
# File 'lib/rex/post/meterpreter/packet_parser.rb', line 55

def cipher
  @cipher
end

#packetObject (protected)

:nodoc:

[View on GitHub]

55
56
57
# File 'lib/rex/post/meterpreter/packet_parser.rb', line 55

def packet
  @packet
end

Instance Method Details

#recv(sock) ⇒ Object

Reads data from the socket and parses as much of the packet as possible.

[View source] [View on GitHub]

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/rex/post/meterpreter/packet_parser.rb', line 32

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

#resetObject

Resets the parser state so that a new packet can begin being parsed.

[View source] [View on GitHub]

25
26
27
# File 'lib/rex/post/meterpreter/packet_parser.rb', line 25

def reset
  self.packet = Packet.new(0)
end