File: lldp.rb

package info (click to toggle)
ruby-packetfu 2.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,520 kB
  • sloc: ruby: 8,344; makefile: 2
file content (54 lines) | stat: -rw-r--r-- 1,479 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# -*- coding: binary -*-
require 'packetfu/protos/eth/header'
require 'packetfu/protos/eth/mixin'

require 'packetfu/protos/lldp/header'
require 'packetfu/protos/lldp/mixin'

module PacketFu

  class LLDPPacket < Packet
    MAGIC = Regexp.new("^\x01\x80\xc2\x00\x00[\x0e\x03\x00]".force_encoding('ASCII-8BIT'), Regexp::NOENCODING)
    include ::PacketFu::EthHeaderMixin
    include ::PacketFu::LLDPHeaderMixin

    attr_accessor :eth_header, :lldp_header

    def self.can_parse?(str)
      return false unless EthPacket.can_parse? str
      return false unless str.size >= 6
      return false unless str[12,2] == "\x88\xcc"
      return false unless str =~ MAGIC
      true
    end

    def initialize(args={})
      @eth_header = EthHeader.new(args).read(args[:eth])
      @lldp_header = LLDPHeader.new(args).read(args[:lldp])
      @eth_header.eth_proto = "\x88\xCC"
      @eth_header.body=@lldp_header

      @headers = [@eth_header, @lldp_header]
      super
    end

    # Generates summary data for LLDP packets.
    def peek_format
      peek_data = ["A  "]
      peek_data << "%-5d" % self.to_s.size
      peek_data << lldp_saddr_mac
      peek_data << "(#{lldp_saddr_mac})"
      peek_data << "->"
      peek_data << "01:80:c2:00:00:0e"
      peek_data.join
    end

    # While there are lengths in LLDPPackets, there's not
    # much to do with them.
    def recalc(args={})
      @headers[0].inspect
    end
  end
end

# vim: nowrap sw=2 sts=0 ts=2 ff=unix ft=ruby