⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rrlookup.pl

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 PL
字号:
#! /usr/local/bin/perl#### Read BGPd logfile and lookup RR's whois database.####   Copyright (c) 1997 Kunihiro Ishiguro##use Socket;## Configuration variables$whois_host = "whois.jpix.ad.jp";#$mail_address = "toshio\@iri.co.jp";$mail_address = "kunihiro\@zebra.org";$mailer = "/usr/sbin/sendmail -oi";#$logfile = "/usr/local/sbin/logfile"$logfile = "logfile";$lookuplog = "lookuplog";## mail routine{    local ($prefix, $origin);    open (LOG, $logfile) || die "can't open $logfile";    open (LOOKUP, ">$lookuplog") || die "can't open $lookuplog";        for (;;) {    while (<LOG>) {        if (/Update\S+ ([\d\.\/]+) .* (\d+) [ie\?]/) {            $prefix = $1;            $origin = $2;            $ret = &whois_check ($prefix, $origin);            if ($ret) {                print LOOKUP "$prefix AS$origin : Check OK\n";            } else {                print LOOKUP "$prefix AS$origin : Error\n";            }#        fflush (LOOKUP);        }    }    sleep (3);    }}sub whois_check{    local ($prefix, $origin) = @_;    local ($rr_prefix, $rr_origin) = ();    local (@result);    $origin = "AS" . $origin;#    print "$prefix $origin\n";    @result = &whois ($prefix);    foreach (@result) {        if (/^route:.*\s([\d\.\/]+)$/) {            $rr_prefix = $1;        }        if (/^origin:.*\s(AS[\d]+)$/) {            $rr_origin = $1;            if ($prefix eq $rr_prefix and $origin eq $rr_origin) {                return 1;            }        }    }    alarm_mail ($prefix, $origin, @result);    return 0;}## get port of whoissub get_whois_port {    local ($name, $aliases, $port, $proto) = getservbyname ("whois", "tcp");    return ($port, $proto);}## whois lookupsub whois {    local ($query) = @_;    local ($port, $proto) = &get_whois_port;    local (@result);    if ($whois_host=~ /^\s*\d+\.\d+\.\d+\.\d+\s*$/) {       $address = pack ("C4",split(/\./,$host));    } else {       $address = (gethostbyname ($whois_host))[4];    }    socket (SOCKET, PF_INET, SOCK_STREAM, $proto);    if (connect (SOCKET, sockaddr_in ($port, $address))) {        local ($oldhandle) = select (SOCKET);        $| = 1;        select($oldhandle);        print SOCKET "$query\r\n";        @result = <SOCKET>;        return @result;    }}##sub alarm_mail {    local ($prefix, $origin, @result) = @_;    open (MAIL, "|$mailer -t $mail_address") || die "can't open $mailer";        print MAIL "From: root\@rr1.jpix.ad.jp\n";    print MAIL "Subject: RR $origin $prefix\n";    print MAIL "MIME-Version: 1.0\n";    print MAIL "Content-Type: text/plain; charset=us-ascii \n\n";    print MAIL "RR Lookup Error Report\n";    print MAIL "======================\n";    print MAIL "Announced route : $prefix from $origin\n\n";    print MAIL "@result";    close MAIL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -