The Inject class handles injecting arrays of binary data on the wire.

To inject single packets, use PacketFu::Packet.to_w() instead.

Methods
A
I
N
Attributes
[RW] array
[RW] stream
[RW] show_live
[R] iface
[R] snaplen
[R] promisc
[R] timeout
Class Public methods
new(args={})
# File lib/packetfu/inject.rb, line 10
                def initialize(args={})
                        @array = [] # Where the packet array goes.
                        @stream = [] # Where the stream goes.
                        @iface = args[:iface] || ENV['IFACE'] || Pcap.lookupdev || "lo" 
                        @snaplen = args[:snaplen] || 0xffff
                        @promisc = args[:promisc] || false # Sensible for some Intel wifi cards
                        @timeout = args[:timeout] || 1
                        @show_live = nil
                end
Instance Public methods
a2w(args={})

Equivalent to array_to_wire

# File lib/packetfu/inject.rb, line 55
                def a2w(args={})
                        array_to_wire(args)
                end
array_to_wire(args={})

Takes an array, and injects them onto an interface. Note that complete packets (Ethernet headers on down) are expected.

Parameters

  :array || arr
   An array of binary data (usually packet.to_s style).
  :int || sleep
   Number of seconds to sleep between injections (in float format)
  :show_live || :live
   If true, puts data about what was injected to stdout.

Example

 inj = PacketFu::Inject.new
 inj.array_to_wire(:array => [pkt1, pkt2, pkt3], :sleep => 0.1)
# File lib/packetfu/inject.rb, line 37
                def array_to_wire(args={})
                        pkt_array = args[:array] || args[:arr] || @array
                        interval = args[:int] || args[:sleep]
                        show_live = args[:show_live] || args[:live] || @show_live

                        @stream = Pcap.open_live(@iface,@snaplen,@promisc,@timeout)
                        pkt_count = 0
                        pkt_array.each do |pkt|
                                @stream.inject(pkt)
                                sleep interval if interval
                                pkt_count +=1
                                puts "Sent Packet \##{pkt_count} (#{pkt.size})" if show_live
                        end
                        # Return # of packets sent, array size, and array total size 
                        [pkt_count, pkt_array.size, pkt_array.join.size]
                end
inject(args={})

Equivalent to array_to_wire

# File lib/packetfu/inject.rb, line 60
                def inject(args={})
                        array_to_wire(args)
                end