Annotation of embedaddon/quagga/tools/rrcheck.pl, revision 1.1
1.1 ! misho 1: #! /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: #$logfile = "/usr/local/sbin/logfile"
! 13: $logfile = shift || die "Please specify filename";
! 14:
! 15: ## mail routine
! 16: {
! 17: local ($prefix, $origin);
! 18:
! 19: open (LOG, $logfile) || die "can't open $logfile";
! 20:
! 21: $index = '';
! 22: while ($index) {
! 23: $index = <LOG>;
! 24: if ($index =~ /[bgpd]/) {
! 25: break;
! 26: }
! 27: }
! 28:
! 29: while (<LOG>) {
! 30: if (/([\d\.\/]+)\s+([\d\.]+)\s+(\d+)\s+(\d+)\s+([\d ]+)\s+[ie\?]/) {
! 31: $prefix = $1;
! 32: $nexthop = $2;
! 33: $med = $3;
! 34: $dummy = $4;
! 35: $aspath = $5;
! 36: ($origin) = ($aspath =~ /([\d]+)$/);
! 37:
! 38: print "$nexthop [$origin] $prefix $aspath ";
! 39:
! 40: $ret = &whois_check ($prefix, $origin);
! 41: if ($ret == 0) {
! 42: print "Check OK\n";
! 43: } elsif ($ret == 1){
! 44: print "AS orgin mismatch\n";
! 45: } else {
! 46: print "prefix doesn't exist \n";
! 47: }
! 48: }
! 49: }
! 50: }
! 51:
! 52: sub whois_check
! 53: {
! 54: local ($prefix, $origin) = @_;
! 55: local ($rr_prefix, $rr_origin) = ();
! 56: local (@result);
! 57:
! 58: $origin = "AS" . $origin;
! 59:
! 60: @result = &whois ($prefix);
! 61:
! 62: $prefix_match = 0;
! 63: foreach (@result) {
! 64: if (/^route:.*\s([\d\.\/]+)$/) {
! 65: $rr_prefix = $1;
! 66: }
! 67: if (/^origin:.*\s(AS[\d]+)$/) {
! 68: $rr_origin = $1;
! 69:
! 70: if ($prefix eq $rr_prefix and $origin eq $rr_origin) {
! 71: return 0;
! 72: } elsif ($prefix eq $rr_prefix) {
! 73: $prefix_match = 1;
! 74: }
! 75: }
! 76: }
! 77: # alarm_mail ($prefix, $origin, @result);
! 78: if ($prefix_match) {
! 79: return 1;
! 80: } else {
! 81: return 2;
! 82: }
! 83: }
! 84:
! 85: ## get port of whois
! 86: sub get_whois_port
! 87: {
! 88: local ($name, $aliases, $port, $proto) = getservbyname ("whois", "tcp");
! 89: return ($port, $proto);
! 90: }
! 91:
! 92: ## whois lookup
! 93: sub whois
! 94: {
! 95: local ($query) = @_;
! 96: local ($port, $proto) = &get_whois_port;
! 97: local (@result);
! 98:
! 99: if ($whois_host=~ /^\s*\d+\.\d+\.\d+\.\d+\s*$/) {
! 100: $address = pack ("C4",split(/\./,$host));
! 101: } else {
! 102: $address = (gethostbyname ($whois_host))[4];
! 103: }
! 104:
! 105: socket (SOCKET, PF_INET, SOCK_STREAM, $proto);
! 106:
! 107: if (connect (SOCKET, sockaddr_in ($port, $address))) {
! 108: local ($oldhandle) = select (SOCKET);
! 109: $| = 1;
! 110: select($oldhandle);
! 111:
! 112: print SOCKET "$query\r\n";
! 113:
! 114: @result = <SOCKET>;
! 115: return @result;
! 116: }
! 117: }
! 118:
! 119: ##
! 120: sub alarm_mail
! 121: {
! 122: local ($prefix, $origin, @result) = @_;
! 123:
! 124: open (MAIL, "|$mailer -t $mail_address") || die "can't open $mailer";
! 125:
! 126: print MAIL "From: root\@rr1.jpix.ad.jp\n";
! 127: print MAIL "Subject: RR $origin $prefix\n";
! 128: print MAIL "MIME-Version: 1.0\n";
! 129: print MAIL "Content-Type: text/plain; charset=us-ascii \n\n";
! 130: print MAIL "RR Lookup Error Report\n";
! 131: print MAIL "======================\n";
! 132: print MAIL "Announced route : $prefix from $origin\n\n";
! 133: print MAIL "@result";
! 134: close MAIL;
! 135: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>