Annotation of embedaddon/quagga/tools/rrlookup.pl, revision 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>