Annotation of embedaddon/quagga/tools/rrlookup.pl, revision 1.1.1.2
1.1.1.2 ! misho 1: #!/usr/bin/env perl
1.1 misho 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>