#!/usr/bin/env ruby

require 'RubyLibtrace'

# 1925, Sun 6 Apr 08 (PDT)
# Config.rb: Create a packet filter, use it to configure an input trace
# Copyright (C) 2008, Nevil Brownlee, U Auckland | CAIDA | Wand

def s_to_hex(s,  offset)  # Print s as a hex dump
   os = "\n" + ''.rjust(offset)
   len = s.length
   o = '';  j = 0
   s.each_byte do |b|
      o << sprintf("%02x", b)
      j += 1
      if j != len
         o << ' ' if j%2 == 0
         o << ' ' if j%4 == 0
         o << os  if j%32 == 0
      end
   end
   o
end

f = Trace.new(ARGV[0])
f.start

n = nfp = 0
f.each_packet do |pkt|
   n += 1

   if pkt.udp && (pkt.udp.source == 53 || pkt.udp.dest == 53)
      nfp += 1

      upp = pkt.udp_payload
      print "Raw packet #{n}, Filtered packet #{nfp}, " +
        "capture_len=#{pkt.capture_len}\n"
      print "data: #{s_to_hex(upp.data, 6)}\n\n"

      break if nfp == 4
      end
end

puts "#{nfp} (filtered) packets\n"

