Annotation of embedaddon/quagga/tools/rrlookup.pl, revision 1.1.1.1

1.1       misho       1: #! /usr/local/bin/perl
                      2: ##
                      3: ## Read BGPd logfile and lookup RR's whois database.
                      4: ##
                      5: ##   Copyright (c) 1997 Kunihiro Ishiguro
                      6: ##
                      7: use Socket;
                      8: 
                      9: ## Configuration variables
                     10: $whois_host = "whois.jpix.ad.jp";
                     11: 
                     12: #$mail_address = "toshio\@iri.co.jp";
                     13: $mail_address = "kunihiro\@zebra.org";
                     14: $mailer = "/usr/sbin/sendmail -oi";
                     15: 
                     16: #$logfile = "/usr/local/sbin/logfile"
                     17: $logfile = "logfile";
                     18: $lookuplog = "lookuplog";
                     19: 
                     20: ## mail routine
                     21: {
                     22:     local ($prefix, $origin);
                     23: 
                     24:     open (LOG, $logfile) || die "can't open $logfile";
                     25:     open (LOOKUP, ">$lookuplog") || die "can't open $lookuplog";
                     26:     
                     27:     for (;;) {
                     28:     while (<LOG>) {
                     29:         if (/Update\S+ ([\d\.\/]+) .* (\d+) [ie\?]/) {
                     30:             $prefix = $1;
                     31:             $origin = $2;
                     32:             $ret = &whois_check ($prefix, $origin);
                     33:             if ($ret) {
                     34:                 print LOOKUP "$prefix AS$origin : Check OK\n";
                     35:             } else {
                     36:                 print LOOKUP "$prefix AS$origin : Error\n";
                     37:             }
                     38: #        fflush (LOOKUP);
                     39:         }
                     40:     }
                     41:     sleep (3);
                     42:     }
                     43: }
                     44: 
                     45: sub whois_check
                     46: {
                     47:     local ($prefix, $origin) = @_;
                     48:     local ($rr_prefix, $rr_origin) = ();
                     49:     local (@result);
                     50: 
                     51:     $origin = "AS" . $origin;
                     52: 
                     53: #    print "$prefix $origin\n";
                     54: 
                     55:     @result = &whois ($prefix);
                     56: 
                     57:     foreach (@result) {
                     58:         if (/^route:.*\s([\d\.\/]+)$/) {
                     59:             $rr_prefix = $1;
                     60:         }
                     61:         if (/^origin:.*\s(AS[\d]+)$/) {
                     62:             $rr_origin = $1;
                     63: 
                     64:             if ($prefix eq $rr_prefix and $origin eq $rr_origin) {
                     65:                 return 1;
                     66:             }
                     67:         }
                     68:     }
                     69:     alarm_mail ($prefix, $origin, @result);
                     70:     return 0;
                     71: }
                     72: 
                     73: ## get port of whois
                     74: sub get_whois_port 
                     75: {
                     76:     local ($name, $aliases, $port, $proto) = getservbyname ("whois", "tcp");
                     77:     return ($port, $proto);
                     78: }
                     79: 
                     80: ## whois lookup
                     81: sub whois 
                     82: {
                     83:     local ($query) = @_;
                     84:     local ($port, $proto) = &get_whois_port;
                     85:     local (@result);
                     86: 
                     87:     if ($whois_host=~ /^\s*\d+\.\d+\.\d+\.\d+\s*$/) {
                     88:        $address = pack ("C4",split(/\./,$host));
                     89:     } else {
                     90:        $address = (gethostbyname ($whois_host))[4];
                     91:     }
                     92: 
                     93:     socket (SOCKET, PF_INET, SOCK_STREAM, $proto);
                     94: 
                     95:     if (connect (SOCKET, sockaddr_in ($port, $address))) {
                     96:         local ($oldhandle) = select (SOCKET);
                     97:         $| = 1;
                     98:         select($oldhandle);
                     99: 
                    100:         print SOCKET "$query\r\n";
                    101: 
                    102:         @result = <SOCKET>;
                    103:         return @result;
                    104:     }
                    105: }
                    106: 
                    107: ##
                    108: sub alarm_mail 
                    109: {
                    110:     local ($prefix, $origin, @result) = @_;
                    111: 
                    112:     open (MAIL, "|$mailer -t $mail_address") || die "can't open $mailer";
                    113:     
                    114:     print MAIL "From: root\@rr1.jpix.ad.jp\n";
                    115:     print MAIL "Subject: RR $origin $prefix\n";
                    116:     print MAIL "MIME-Version: 1.0\n";
                    117:     print MAIL "Content-Type: text/plain; charset=us-ascii \n\n";
                    118:     print MAIL "RR Lookup Error Report\n";
                    119:     print MAIL "======================\n";
                    120:     print MAIL "Announced route : $prefix from $origin\n\n";
                    121:     print MAIL "@result";
                    122:     close MAIL;
                    123: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>