class PacketFu::IPv6Header

IPv6Header is complete IPv6 struct, used in IPv6Packet.

Header Definition

Integer(4 bits)   :ipv6_v      Default: 6     # Versiom
Integer(8 bits)   :ipv6_class  Defualt: 0     # Class
Integer(20 bits)  :ipv6_label  Defualt: 0     # Label
Int16             :ipv6_len    Default: calc  # Payload length
Int8              :ipv6_next                  # Next Header
Int8              :ipv6_hop    Default: 0xff  # Hop limit
AddrIpv6          :ipv6_src
AddrIpv6          :ipv6_dst
String            :body

Public Class Methods

new(args={}) click to toggle source
Calls superclass method
# File lib/packetfu/protos/ipv6/header.rb, line 80
def initialize(args={})
  super(
    (args[:ipv6_v] || 6),
    (args[:ipv6_class] || 0),
    (args[:ipv6_label] || 0),
    Int16.new(args[:ipv6_len]),
    Int8.new(args[:ipv6_next]),
    Int8.new(args[:ipv6_hop] || 0xff),
    AddrIpv6.new.read(args[:ipv6_src] || ("\x00" * 16)),
    AddrIpv6.new.read(args[:ipv6_dst] || ("\x00" * 16)),
    StructFu::String.new.read(args[:body])
  )
end

Public Instance Methods

ipv6_calc_len() click to toggle source

Calculates the payload length.

# File lib/packetfu/protos/ipv6/header.rb, line 152
def ipv6_calc_len
  self.ipv6_len = body.to_s.length
end
ipv6_class() click to toggle source

Getter for the traffic class.

# File lib/packetfu/protos/ipv6/header.rb, line 125
def ipv6_class; self[:ipv6_class].to_i; end
ipv6_class=(i) click to toggle source

Setter for the traffic class.

# File lib/packetfu/protos/ipv6/header.rb, line 123
def ipv6_class=(i); self[:ip_class] = i.to_i; end
ipv6_daddr() click to toggle source

Get the destination address in a more readable form.

# File lib/packetfu/protos/ipv6/header.rb, line 177
def ipv6_daddr
  self[:ipv6_dst].to_x
end
Also aliased as: ipv6_dst_readable
ipv6_daddr=(str) click to toggle source

Set the destination address in a more readable form.

# File lib/packetfu/protos/ipv6/header.rb, line 182
def ipv6_daddr=(str)
  self[:ipv6_dst].read_x(str)
end
ipv6_dst() click to toggle source

Getter for the destination address.

# File lib/packetfu/protos/ipv6/header.rb, line 149
def ipv6_dst; self[:ipv6_dst].to_i; end
ipv6_dst=(i) click to toggle source

Setter for the destination address.

# File lib/packetfu/protos/ipv6/header.rb, line 147
def ipv6_dst=(i); typecast i; end
ipv6_dst_readable()
Alias for: ipv6_daddr
ipv6_hop() click to toggle source

Getter for the hop limit.

# File lib/packetfu/protos/ipv6/header.rb, line 141
def ipv6_hop; self[:ipv6_hop].to_i; end
ipv6_hop=(i) click to toggle source

Setter for the hop limit.

# File lib/packetfu/protos/ipv6/header.rb, line 139
def ipv6_hop=(i); typecast i; end
ipv6_label() click to toggle source

Getter for the flow label.

# File lib/packetfu/protos/ipv6/header.rb, line 129
def ipv6_label; self[:ipv6_label].to_i; end
ipv6_label=(i) click to toggle source

Setter for the flow label.

# File lib/packetfu/protos/ipv6/header.rb, line 127
def ipv6_label=(i); self[:ip_label] = i.to_i; end
ipv6_len() click to toggle source

Getter for the payload length.

# File lib/packetfu/protos/ipv6/header.rb, line 133
def ipv6_len; self[:ipv6_len].to_i; end
ipv6_len=(i) click to toggle source

Setter for the payload length.

# File lib/packetfu/protos/ipv6/header.rb, line 131
def ipv6_len=(i); typecast i; end
ipv6_next() click to toggle source

Getter for the next protocol header.

# File lib/packetfu/protos/ipv6/header.rb, line 137
def ipv6_next; self[:ipv6_next].to_i; end
ipv6_next=(i) click to toggle source

Setter for the next protocol header.

# File lib/packetfu/protos/ipv6/header.rb, line 135
def ipv6_next=(i); typecast i; end
ipv6_recalc(arg=:all) click to toggle source

Recalculates the calculatable fields for this object.

# File lib/packetfu/protos/ipv6/header.rb, line 157
def ipv6_recalc(arg=:all)
  case arg
  when :ipv6_len
    ipv6_calc_len
  when :all
    ipv6_recalc(:ipv6_len)
  end
end
ipv6_saddr() click to toggle source

Get the source address in a more readable form.

# File lib/packetfu/protos/ipv6/header.rb, line 167
def ipv6_saddr
  self[:ipv6_src].to_x
end
Also aliased as: ipv6_src_readable
ipv6_saddr=(str) click to toggle source

Set the source address in a more readable form.

# File lib/packetfu/protos/ipv6/header.rb, line 172
def ipv6_saddr=(str)
  self[:ipv6_src].read_x(str)
end
ipv6_src() click to toggle source

Getter for the source address.

# File lib/packetfu/protos/ipv6/header.rb, line 145
def ipv6_src; self[:ipv6_src].to_i; end
ipv6_src=(i) click to toggle source

Setter for the source address.

# File lib/packetfu/protos/ipv6/header.rb, line 143
def ipv6_src=(i); typecast i; end
ipv6_src_readable()

Readability aliases

Alias for: ipv6_saddr
ipv6_v() click to toggle source

Getter for the version (usually, 6).

# File lib/packetfu/protos/ipv6/header.rb, line 121
def ipv6_v; self[:ipv6_v].to_i; end
ipv6_v=(i) click to toggle source

Setter for the version (usually, 6).

# File lib/packetfu/protos/ipv6/header.rb, line 119
def ipv6_v=(i); self[:ip_v] = i.to_i; end
read(str) click to toggle source

Reads a string to populate the object.

# File lib/packetfu/protos/ipv6/header.rb, line 103
def read(str)
  force_binary(str)
  return self if str.nil?
  self[:ipv6_v] = str[0,1].unpack("C").first >> 4
  self[:ipv6_class] = (str[0,2].unpack("n").first & 0x0ff0) >> 4
  self[:ipv6_label] = str[0,4].unpack("N").first & 0x000fffff
  self[:ipv6_len].read(str[4,2])
  self[:ipv6_next].read(str[6,1])
  self[:ipv6_hop].read(str[7,1])
  self[:ipv6_src].read(str[8,16])
  self[:ipv6_dst].read(str[24,16])
  self[:body].read(str[40,str.size]) if str.size > 40
  self
end
to_s() click to toggle source

Returns the object in string form.

# File lib/packetfu/protos/ipv6/header.rb, line 95
def to_s
  bytes_v_class_label = [(self.ipv6_v << 28) +
   (self.ipv6_class << 20) +
   self.ipv6_label].pack("N")
  bytes_v_class_label + (self.to_a[3,6].map {|x| x.to_s}.join)
end