Parent

Included Modules

Class/Module Index [+]

Quicksearch

PacketFu::IPv6Header

IPv6Header is complete IPv6 struct, used in IPv6Packet.

Header Definition

Fixnum (4 bits)   :ipv6_v      Default: 6     # Versiom
Fixnum (8 bits)   :ipv6_class  Defualt: 0     # Class
Fixnum (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
# File lib/packetfu/protos/ipv6/header.rb, line 78
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 150
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 123
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 121
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 175
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 180
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 147
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 145
def ipv6_dst=(i); typecast i; end
ipv6_dst_readable() click to toggle source
Alias for: ipv6_daddr
ipv6_hop() click to toggle source

Getter for the hop limit.

# File lib/packetfu/protos/ipv6/header.rb, line 139
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 137
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 127
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 125
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 131
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 129
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 135
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 133
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 155
def ipv6_recalc(arg=:all)
        case arg
        when :ipv6_len
                ipv6_calc_len
        when :all
                ipv6_recalc(: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 165
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 170
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 143
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 141
def ipv6_src=(i); typecast i; end
ipv6_src_readable() click to toggle source

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 119
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 117
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 101
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 93
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

[Validate]

Generated with the Darkfish Rdoc Generator 2.