>From: "MooD" <[EMAIL PROTECTED]>
>Reply-To: [EMAIL PROTECTED]
>To: <[EMAIL PROTECTED]>
>Subject: [speedtouch] checkpeer.pl
>Date: Sat, 16 Mar 2002 12:37:13 +0100
>
>
>Hello, je suis d�sol� de renouveller ma demande mais suite recherche dans
>l'archive du forum, je ne trouve toujours pas ce fameux script...
>
>Si qqn pouvait me l'envoyer ou me filer une url !
>
>
>Merci
>
>
>
>Liste de diffusion modem ALCATEL SpeedTouch USB
>Pour se d�sinscrire : 
>mailto:[EMAIL PROTECTED]?subject=unsubscribe
>
>


_________________________________________________________________
Discutez en ligne avec vos amis, essayez MSN Messenger�: 
http://messenger.msn.fr


-- Attached file included as plaintext by Listar --
-- File: checkpeer.pl

#!/usr/bin/perl
#use strict;
use Net::Ping;

my $line;my $dummy;my $peer;my $ip1;my $ip2;my $ip3;my $ip4;my $p;my $field;
my $status="OK";
my $sleep=60;
my $peermissing=0;
my $peerunreach=0;
my $oldrecvpack=0;
my $recvpackets=0;

# sub performing restart of pppd and relevant process
##
sub restartppp {
        system("killall pppd;pppd");
        sleep 20;
        system("/root/ipcheck/dyndnsupd.sh");
        system("/etc/rc.d/init.d/snortd restart");
}

# sub performing restart of usb and relevant process
##
sub restartusb {
        system("/etc/rc.d/init.d/adsl restart");
}

# sub to update number of packets received on ppp0
##
sub updatepackets {
        my $inpackets=0;
        my $line;
        my $dummy;
        $line=`ifconfig ppp0 | grep  "Paquets Re"`;
        chomp $line;
        ($dummy,$inpackets)=split(":",$line);
        $line=$inpackets;
        ($inpackets,$dummy)=split(" ",$line);
        return $inpackets;
}

# Start of script
##

#Update number of packets the first time
$recvpackets=updatepackets();
$oldrecvpack=$recvpackets;
open(LOG,">>/var/log/checkpeer.log");
print "Starting to monitor ppp0 link\n";
while ($status ne "quit"){
        #Testing if the ppp interface is OK by fetching the peer IP address
        $line=`ifconfig ppp0 | grep inet `;
        chomp $line;
        ($dummy,$dummy,$field)=split (":",$line);
        ($peer,$dummy)=split (" ",$field);
        ($ip1,$ip2,$ip3,$ip4)=split ("\\.",$peer);
        if ($ip1<=0 || $ip1>255 || $ip2<=0 || $ip2>255 || $ip3<=0 || $ip3>255 || 
$ip4<=0 || $ip4>255){
                $status="peer missing";
        }
        else{
                #Test if we have received new packets on ppp0 to save pinging peer
                $recvpackets=updatepackets();
                if ($recvpackets > $oldrecvpack){
                        $oldrecvpack=$recvpackets;
                        $status="packets detected";
                }
                elsif ($recvpackets < $oldrecvpack){
                        $oldrecvpack=$recvpackets;
                        $status="interface reset";
                }
                else {# No packets received lately.Checking peer by pinging it ...
                        $p = Net::Ping->new("icmp");
                        if ($p->ping($peer,1)){
                                $status="peer reacheable";
                        }
                        else{
                                $status="peer unreacheable";
                        }
                        $p->close();
                        #Update packets count so next comparison takes the ping into 
account
                        $recvpackets=updatepackets();
                        $oldrecvpack=$recvpackets;
                }
        }

#From here, we take different actions depending on the previous results
        if ($status eq "peer missing"){
                $peermissing++;
                print  scalar(localtime()).": PPPD is being started (peer missing)\n";
                restartppp();
                #Increase sleep time each time in case pppd needs more time
                $sleep=30+$peermissing*5;
                if ($peermissing >= 5){
                        print  scalar(localtime()).": USB is being restarted\n";
                        restartusb();
                        $peerunreach=0;
                        $sleep=120;
                }
        }
        elsif ($status eq "peer unreacheable"){
                $peerunreach++;
                $sleep=5;
                print  scalar(localtime()).": PEER $peer is down ($peerunreach 
time(s))"."\n";
                if ($peerunreach >= 5){
                        print  scalar(localtime()).": PPPD is being restarted (peer 
unreacheable)\n";
                        restartppp();
                        $peerunreach=0;
                        #Increase sleep time each time in case pppd needs more time
                        $sleep=15+$peerunreach;
                }
        }
        elsif ($status eq "packets detected"){
                $sleep=30;
                print  scalar(localtime()).": PPP0 traffic increased to $recvpackets 
packets. Skipping ping"."\n";
                $peerunreach=0;
        }
        elsif ($status eq "interface reset"){
                $sleep=20;
                $peerunreach=0;
                print  scalar(localtime()).": PPP0 interface reset $recvpackets 
packets. 
Skipping ping"."\n";
        }
        elsif ($status eq "peer reacheable"){
                print  scalar(localtime()).": PEER $peer is alive"."\n";
                $sleep=60;
                $peermissing=0;
                $peerunreach=0;
        }
        print  scalar(localtime()).": SLEEP for $sleep seconds\n";
        sleep $sleep;
}



Liste de diffusion modem ALCATEL SpeedTouch USB
Pour se d�sinscrire : mailto:[EMAIL PROTECTED]?subject=unsubscribe

        

Reply via email to