Class: PacketFu::EthPacket
- Includes:
- EthHeaderMixin
- Defined in:
- lib/packetfu/protos/eth.rb
Overview
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)
Instance Attribute Summary collapse
-
#eth_header ⇒ Object
Returns the value of attribute eth_header.
Attributes inherited from Packet
#flavor, #headers, #iface, #inspect_style
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(args = {}) ⇒ EthPacket
constructor
A new instance of EthPacket.
- #read(str = nil, args = {}) ⇒ Object
-
#recalc(args = {}) ⇒ Object
Does nothing, really, since there’s no length or checksum to calculate for a straight Ethernet packet.
Methods included from EthHeaderMixin
#eth_daddr, #eth_daddr=, #eth_dst, #eth_dst=, #eth_dst_readable, #eth_proto, #eth_proto=, #eth_proto_readable, #eth_saddr, #eth_saddr=, #eth_src, #eth_src=, #eth_src_readable
Methods inherited from Packet
#==, #clone, #dissect, #dissection_table, force_binary, #handle_is_identity, #hexify, inherited, #inspect, #inspect_hex, #kind_of?, #layer, layer, layer_symbol, #layer_symbol, #method_missing, #orig_kind_of?, parse, #payload, #payload=, #peek, #peek_format, #proto, #respond_to?, #size, #to_f, #to_pcap, #to_s, #to_w, #write
Constructor Details
#initialize(args = {}) ⇒ EthPacket
Returns a new instance of EthPacket.
45 46 47 48 49 |
# File 'lib/packetfu/protos/eth.rb', line 45 def initialize(args={}) @eth_header = EthHeader.new(args).read(args[:eth]) @headers = [@eth_header] super end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class PacketFu::Packet
Instance Attribute Details
#eth_header ⇒ Object
Returns the value of attribute eth_header.
21 22 23 |
# File 'lib/packetfu/protos/eth.rb', line 21 def eth_header @eth_header end |
Class Method Details
.can_parse?(str) ⇒ Boolean
23 24 25 26 27 28 29 30 |
# File 'lib/packetfu/protos/eth.rb', line 23 def self.can_parse?(str) # XXX Temporary fix. Need to extend the EthHeader class to handle more. valid_eth_types = [0x0800, 0x0806, 0x86dd, 0x88cc] 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 |
Instance Method Details
#read(str = nil, args = {}) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/packetfu/protos/eth.rb', line 32 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 = {}) ⇒ Object
Does nothing, really, since there’s no length or checksum to calculate for a straight Ethernet packet.
41 42 43 |
# File 'lib/packetfu/protos/eth.rb', line 41 def recalc(args={}) @headers[0].inspect end |