Class: PacketGen::Header::ARP

Inherits:
Struct
  • Object
show all
Extended by:
HeaderClassMethods
Includes:
HeaderMethods, StructFu
Defined in:
lib/packetgen/header/arp.rb

Overview

ARP header class

Author:

  • Sylvain Daubert

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from HeaderClassMethods

bind_header, known_headers

Methods included from HeaderMethods

#header_id, #ip_header, #packet, #packet=

Methods included from StructFu

#clone, #set_endianness, #sz, #to_s, #typecast

Methods inherited from Struct

#force_binary

Constructor Details

#initialize(options = {}) ⇒ ARP

Returns a new instance of ARP.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :hw_type (Integer)

    network protocol type (default: 1)

  • :proto (Integer)

    internet protocol type (default: 0x800)

  • :hw_len (Integer)

    length of hardware addresses (default: 6)

  • :proto_len (Integer)

    length of internet addresses (default: 4)

  • :opcode (Integer)

    operation performing by sender (default: 1). known values are request (1) and reply (2)

  • :src_mac (String)

    sender hardware address

  • :src_ip (String)

    sender internet address

  • :dst_mac (String)

    target hardware address

  • :dst_ip (String)

    targetr internet address



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/packetgen/header/arp.rb', line 23

def initialize(options={})
  super Int16.new(options[:hw_type] || 1),
        Int16.new(options[:proto] || 0x800),
        Int8.new(options[:hw_len] || 6),
        Int8.new(options[:proto_len] || 4),
        Int16.new(options[:opcode] || 1),
        Eth::MacAddr.new.parse(options[:src_mac]),
        IP::Addr.new.parse(options[:src_ip]),
        Eth::MacAddr.new.parse(options[:dst_mac]),
        IP::Addr.new.parse(options[:dst_ip]),
        StructFu::String.new.read(options[:body])
end

Instance Attribute Details

#bodyObject

Returns the value of attribute body

Returns:

  • (Object)

    the current value of body



6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def body
  @body
end

#dst_ipString

Returns:



6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def dst_ip
  @dst_ip
end

#dst_macString

Returns:



6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def dst_mac
  @dst_mac
end

#hw_lenInteger

Returns:

  • (Integer)


6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def hw_len
  @hw_len
end

#hw_typeInteger

Returns:

  • (Integer)


6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def hw_type
  @hw_type
end

#opcodeInteger

Returns:

  • (Integer)


6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def opcode
  @opcode
end

#protoInteger

Returns:

  • (Integer)


6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def proto
  @proto
end

#proto_lenInteger

Returns:

  • (Integer)


6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def proto_len
  @proto_len
end

#src_ipString

Returns:



6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def src_ip
  @src_ip
end

#src_macString

Returns:



6
7
8
# File 'lib/packetgen/header/arp.rb', line 6

def src_mac
  @src_mac
end

Instance Method Details

#read(str) ⇒ self

Read a ARP header from a string

Parameters:

  • str (String)

    binary string

Returns:

  • (self)

Raises:



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/packetgen/header/arp.rb', line 39

def read(str)
  force_binary str
  raise ParseError, 'string too short for ARP' if str.size < self.sz
  self[:hw_type].read str[0, 2]
  self[:proto].read str[2, 2]
  self[:hw_len].read str[4, 1]
  self[:proto_len].read str[5, 1]
  self[:opcode].read str[6, 2]
  self[:src_mac].read str[8, 6]
  self[:src_ip].read str[14, 4]
  self[:dst_mac].read str[18, 6]
  self[:dst_ip].read str[24, 4]
  self[:body].read str[28..-1]
end