djbdns
[Top] [All Lists]

Log processing scripts for tinydns / axfrdns

To: dns@list.cr.yp.to
Subject: Log processing scripts for tinydns / axfrdns
From: mjd-list-dns@plover.com (Mark Dominus)
Date: Wed, 08 Nov 2006 19:59:08 -0500
Delivered-to: sp-com-lists@consult.net
Delivered-to: gmail-djbdns@securepoint.com
Delivered-to: sp.com.list@gmail.com
Delivered-to: mailing list dns@list.cr.yp.to
Mailing-list: contact dns-help@list.cr.yp.to; run by ezmlm
Organization: Plover Systems
Sender: mjd@plover.com
The tinydns script translates:

        @4000000045527c78280a639c d1f40592:95da:94ca + 000f plover.com
        @4000000045527c78352c5f94 d41b35cb:4313:b366 + 0001 plover.com


To:

        Wed Nov  8 19:55:10 2006 ics3.Atlanta1.Level3.net 38362 38090 mx 
plover.com
        Wed Nov  8 19:55:10 2006 dnscache-1-b7.bzn.proxad.net 17171 45926 a 
plover.com


The axfrdns script translates:

        @40000000454ecb7608eafb5c cff55202:9833:56ac 00fb mjdomin.us
        @40000000454ecb7612e89d44 cff55202:9834:56ad 0006 mjdomin.us
        @40000000454ecb761c33045c cff55202:9834:56ae 00fc mjdomin.us


To:

        Mon Nov  6 00:43:08 2006 ns2.dca.net 38963 22188 251 mjdomin.us
        Mon Nov  6 00:43:08 2006 ns2.dca.net 38964 22189 SOA mjdomin.us
        Mon Nov  6 00:43:08 2006 ns2.dca.net 38964 22190 AXFR mjdomin.us


Both scripts accept a "-n" option to suppress address-to-name translation.

Corrections and suggestions will be gratefully received.


================================================================ tinydns

#!/usr/bin/perl


if ($ARGV[0] eq "-n") {
  $NONAMES = shift;
} else {
  require Socket;
  Socket->import("inet_aton", 'AF_INET');
}

@ARGV = '/service/tinydns/log/main/current' 
  if @ARGV == 0 && -t STDIN;

%typename = (1 => "a", 16 => "txt", 15 => "mx", 2 => "ns",
             6 => "soa", 5 => "cname", 12 => "ptr", 13 => "hinfo",
             24 => "sig", 25 => "key", 28 => "aaaa", 38 => "a6");

$|=1;

while (<>) {
  chomp;
  my ($tai64, $addrport, $result, $type, $name) = split;
  my $time = timecvt($tai64);
  if (! defined $name) {
    ($tai64, my $rest) = split /\s+/, $_, 2;    
    print "$time $rest\n";
    next;
  }
  my ($addr, $local, $qid) = split /:/, $addrport;
  $addr = join ".", map hex(substr($addr, $_*2, 2)), 0..3;
  $local = hex($local);
  $qid = hex($qid);
  $type = hex($type);
  $type = $typename{$type} || $type;

  unless ($NONAMES) {
    my $host = gethostbyaddr(inet_aton($addr), AF_INET());
    $addr = $host if defined $host;
  }

  print "$time $addr $local $qid $type $name\n";
}

sub timecvt {
  my $tai = shift;
  if (my ($sec, $msec) = $tai =~ /^\@.{8}(.{8})(.{8})/) {
    return scalar localtime(hex($sec) + hex($msec)/(1<<31)/2 - 10);
  } else { return "????" }
}

================================================================ axfrdns

#!/usr/bin/perl

if ($ARGV[0] eq "-n") {
  $NONAMES = shift;
} else {
  require Socket;
  Socket->import("inet_aton", 'AF_INET');
}

@ARGV = '/service/axfrdns/log/main/current' 
  if @ARGV == 0 && -t STDIN;

%typename = (1 => "A", 2 => "NS", 5 => "CNAME", 6 => "SOA",
             12 => "PTR", 13 => "HINFO", 15 => "MX", 16 => "TXT",
             17 => "RP", 24 => "SIG", 25 => "KEY", 28 => "AAAA",
             252 =>  "AXFR", 255 => "ANY", 
            );

$|=1;

while (<>) {
  
  chomp;
  my ($tai64, $remote, $type, $zone) = split / /, $_, 4;
  my ($addr, $port, $qid) = split /:/, $remote;
  next if $remote eq "tcpserver:";
  my $time = timecvt($tai64);
  $addr = join ".", map hex(substr($addr, $_*2, 2)), 0..3;
  $_ = hex for $port, $qid, $type;
  $type = $typename{$type} || $type;

  unless ($NONAMES) {
    my $host = gethostbyaddr(inet_aton($addr), AF_INET());
    $addr = $host if defined $host;
  }

  # Time remote-host remote-port request-type zone-requested
  print "$time $addr $port $qid $type $zone\n";
}

sub timecvt {
  my $tai = shift;
  if (my ($sec, $msec) = $tai =~ /^\@.{8}(.{8})(.{8})/) {
    return scalar localtime(hex($sec) + hex($msec)/(1<<31)/2 - 10);
  } else { return "????" }
}

<Prev in Thread] Current Thread [Next in Thread>