class ReassembleTcp::PacketStream
packet stream for the same direction and sequence(or acknowledge) number
Attributes
direction[R]
pkts[R]
range[R]
seq_ack_num[R]
Public Class Methods
new(direction, pkt)
click to toggle source
@param [Symbol] direction :send or :recv @param [PacketFu::Packet] pkt packet
# File lib/reassemble_tcp/packet_stream.rb, line 9 def initialize(direction, pkt) case direction when :send @seq_ack_num = pkt.tcp_seq.to_i when :recv @seq_ack_num = pkt.tcp_ack.to_i else raise ArgumentError, "direction should be :send or :recv" end @direction = direction @range = pkt.timestamp..pkt.timestamp @pkts = [pkt] end
Public Instance Methods
append(direction, pkt)
click to toggle source
@param [Symbol] direction :send or :recv @param [PacketFu::Packet] pkt packet @return [Array<PacketFu::Packet>]
# File lib/reassemble_tcp/packet_stream.rb, line 26 def append(direction, pkt) raise ArgumentError unless match?(direction, pkt) @pkts << pkt @range = Range.new(*[@range.begin, @range.end, pkt.timestamp].minmax) @pkts end
Also aliased as: <<
data()
click to toggle source
reassemble tcp stream data @return [String] reassembled data
# File lib/reassemble_tcp/packet_stream.rb, line 49 def data pkts = @pkts.sort_by!{|pk| pk.timestamp } pkts.map{|pkt| pkt.payload }.select{|pay| pay !~ /\A\0+\Z/}.compact.join end
last_timestamp()
click to toggle source
@return [Float] unix time value
# File lib/reassemble_tcp/packet_stream.rb, line 35 def last_timestamp @range.last end
match?(direction, pkt)
click to toggle source
@param [Symbol] direction :send or :recv @param [PacketFu::Packet] pkt packet @return [Boolean]
# File lib/reassemble_tcp/packet_stream.rb, line 42 def match?(direction, pkt) num = (direction == :send) ? pkt.tcp_seq.to_i : pkt.tcp_ack.to_i @direction == direction && @seq_ack_num == num end