EthPacket is used to construct Ethernet packets. They contain an Ethernet header, and that’s about it.

Example

  require 'packetfu'
  eth_pkt = PacketFu::EthPacket.new
  eth_pkt.eth_saddr="00:1c:23:44:55:66"
  eth_pkt.eth_daddr="00:1c:24:aa:bb:cc"

  eth_pkt.to_w('eth0') # Inject on the wire. (require root)
Methods
C
N
R
Attributes
[RW] eth_header
Class Public methods
can_parse?(str)
# File lib/packetfu/protos/eth.rb, line 264
                def self.can_parse?(str)
                        # XXX Temporary fix. Need to extend the EthHeader class to handle more.
                        valid_eth_types = [0x0800, 0x0806, 0x86dd]
                        return false unless str.size >= 14
                        type = str[12,2].unpack("n").first rescue nil
                        return false unless valid_eth_types.include? type
                        true
                end
new(args={})
# File lib/packetfu/protos/eth.rb, line 286
                def initialize(args={})
                        @eth_header = EthHeader.new(args).read(args[:eth])
                        @headers = [@eth_header]
                        super
                end
Instance Public methods
read(str=nil,args={})
# File lib/packetfu/protos/eth.rb, line 273
                def read(str=nil,args={})
                        raise "Cannot parse `#{str}'" unless self.class.can_parse?(str)
                        @eth_header.read(str)
                        super(args)
                        return self
                end
recalc(args={})

Does nothing, really, since there’s no length or checksum to calculate for a straight Ethernet packet.

# File lib/packetfu/protos/eth.rb, line 282
                def recalc(args={})
                        @headers[0].inspect
                end