File: bind8-query2dlf.in

package info (click to toggle)
lire 20020214-7
  • links: PTS
  • area: main
  • in suites: woody
  • size: 6,180 kB
  • ctags: 1,245
  • sloc: perl: 11,637; xml: 5,725; sh: 3,458; makefile: 1,008
file content (147 lines) | stat: -rw-r--r-- 3,436 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#! @PATHTOPERL@ -w

# vim:syntax=perl

use strict;
use lib '@LR_PERL5LIBDIR@';
use Lire::Time;
use Lire::Program qw( :msg :dlf );

init_dlf_converter( "dns" );

my $schema  = eval { Lire::DlfSchema::load_schema( "dns" ) };
lr_err( "failed to load dns schema: $@" ) if $@;
my $dlf_maker	= 
  $schema->make_hashref2asciidlf_func( qw/time requesting_host request 
					  type resolver/ );


sub parse_query {
    my ( $line ) = @_;

    my %dlf = ();

    my ( $year, $month, $day, $time, $resolver );
    # 10-Apr-2000 00:01:20.307 XX+/1.2.214.6/1.8.1.in-addr.arpa/SOA/IN
    # 10-Apr-2000 00:01:20.307 <something> XX+/1.2.214.6/1.8.1.in-addr.arpa/SOA/IN
    ( $day,
      $month,
      $year,
      $time,
      $resolver,
      $dlf{requesting_host},
      $dlf{request},
      $dlf{type},
    ) = $line =~ m!^
		  (\d+)-(\w+)-(\d+)\s([\d.:]+)\s.*?XX([ +])
		  /([\d.]+)
		  /(.*?)
		  /(\w+)
		  (?:/IN)?
		  $!x
		    or die "bind8 lexer failed\n";

    $dlf{resolver} = $resolver eq '+' ? 'recurs' : 'nonrec';
    $dlf{time} = date2cal( $year, $month, $day, $time );
    $dlf_maker->( \%dlf );
}

my $lines	= 0;
my $dlflines	= 0;
my $errorlines	= 0;
while (<>) {
    chomp;
    $lines++;

    next unless ($_ =~ m! XX[ +]/!); # XX is hardcoded in bind8

    eval {
	my $dlf = parse_query( $_ );
	print join( " ", @$dlf), "\n";
	$dlflines++;
    };
    if ( $@ ) {
	lr_warn( $@ );
	lr_notice( qq{cannot convert line $. "$_" to dns dlf, skipping} );
	$errorlines++;
    }
}

end_dlf_converter( $lines, $dlflines, $errorlines );

__END__

=pod 

=head1 NAME

bind8-query2dlf - convert BIND8 querylogs to dlf

=head1 SYNOPSIS

B<bind8-query2dlf>

=head1 DESCRIPTION

This script converts each line in a bind8 querylog to a dns dlf record.

BIND generates these logs when something like

 logging {
     channel query_logging {
         file "/var/log/named_querylog"
         versions 3 size 100M;
         print-time yes;                 // timestamp log entries              
      };

      category queries {
          query_logging;
      };
 };

is in bind's named.conf.  This will save up to three logfiles of maximum 
100 megabytes in the directory /var/log. 

These logfiles look like:

 10-Apr-2000 00:01:20.307 XX /10.2.3.4/1.2.3.in-addr.arpa/SOA/IN
 10-Apr-2000 00:01:20.308 XX+/10.4.3.2/host.foo.com/A/IN

=head1 SEE ALSO

http://www.logreport.org/doc/gen/dns/bind8.php

bind9-query2dlf(1)

=head1 VERSION

$Id: bind8-query2dlf.in,v 1.17 2002/01/16 21:26:14 flacoste Exp $

=head1 COPYRIGHT

Copyright (C) 2000-2001 Stichting LogReport Foundation LogReport@LogReport.org

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program (see COPYING); if not, check with
http://www.gnu.org/copyleft/gpl.html or write to the Free Software 
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.

=head1 AUTHOR

Edwin Groothuis, now maintained by Joost van Baal

=cut

# Local Variables:
# mode: cperl
# End: