#!/bin/sh # # poptest: POP's auf Erreichbarkeit pruefen. # Georg Horn # cd /home/horn/public_html/poptest # Datei mit POPs: POPLST=pops.lst # Anzahl Waehlversuche: MAXDIALTRY=3 # Anzahl Versuche ppp-Verbindung zu bekommen: MAXCHECKTRY=2 # Adresse an die Fehler gemailt werden: #MAILTO=horn@eins-und-eins.de #MAILTO=horn #MAILTO=tdnmchn@mnh.telekom.de #MAILTO=siebert@irc.eins-und-eins.de MAILTO=arendt@irc.eins-und-eins.de # Rechner, der per ping getestet wird: PINGHOST=www.top.de # Schleife ueber alle POPs: cat $POPLST | while read POP do # Datei enthaelt alle POPs im Format "Ort Telnr." ORT=`echo $POP | sed 's/ .*//'` TEL=`echo $POP | sed 's/.* //'` # aktuelles Datum: DATE=`date '+%d.%m.%y'` YYMM=`date '+%y%m'` DD=`date '+%d'` TIME=`date '+%H:%M:%S'` # Verzeichnis und Datei fuer Statistikdaten anlegen: if [ ! -d "$YYMM/$DD" ] then mkdir -p "$YYMM/$DD" chown -R horn "$YYMM" fi if [ ! -f "$YYMM/$DD/$ORT" ] then touch "$YYMM/$DD/$ORT" chown horn "$YYMM/$DD/$ORT" fi echo "" echo "$TIME: checking POP $ORT, phone number $TEL..." # Versuche Verbindung herzustellen: DIALTRY=1 while [ "$DIALTRY" -le "$MAXDIALTRY" ] do # Verbindungsaufbau starten: echo "dialing..." /usr/sbin/pppd connect '/usr/sbin/chat -v ABORT BUSY ABORT "NO CARRIER" \ "" ATZ OK ATDT0,'$TEL' CONNECT' \ /dev/modem 38400 crtscts modem noipdefault \ +ua /usr/local/bin/1u1passwd # Auf Verbindung warten sleep 35 CHECKTRY=0 YOUGOTIT=0 while [ "$CHECKTRY" -lt "$MAXCHECKTRY" ] do # Wurde Verbindung hergestellt? echo "checking for connection..." ifconfig | grep ppp0 >/dev/null 2>/dev/null if [ "$?" = 0 ] then # Verbindung ist da! ifconfig ppp0 YOUGOTIT=1 break fi # Etwas Zeit lassen... sleep 10 CHECKTRY=`expr $CHECKTRY + 1` done if [ "$YOUGOTIT" = 1 ] then break else sleep 30 fi DIALTRY=`expr $DIALTRY + 1` done # Verbindung hergestellt? if [ "$YOUGOTIT" = 0 ] then # Keine Verbindung: Alarm schlagen! echo "no connection!" ALARM="Einwahl POP $ORT, $TEL nicht moeglich." echo $ALARM | mail -s "$ALARM" $MAILTO # Daten fuer Statistiken wegschreiben: echo "$TIME ERR 100 9999.9/9999.9/9999.9" >> $YYMM/$DD/$ORT # pppd killen: echo "hanging up..." killall pppd > /dev/null 2> /dev/null # Give him some time to die... sleep 10 else # Verbindung hergestellt, versuchen einen Rechner zu erreichen: echo "we got it!" echo "trying to ping $PINGHOST" # Host-Route zum $PINGHOST ueber device ppp0 eintragen: route add -host $PINGHOST ppp0 netstat -rn ping -c 10 -s 1024 $PINGHOST | tee poptest.$$ PAKETLOSS=`cat poptest.$$ | grep "packet loss" | awk ' { print substr($7, 0, length($7) - 1) }'` ROUNDTRIP=`cat poptest.$$ | grep "round-trip" | awk '{ print $4 }'` if [ "$PAKETLOSS" != "0" ] then echo "Warning: $PAKETLOSS % packet loss!" echo "POP: $ORT, Nummer: $TEL" >> poptest.$$ cat poptest.$$ | mail -s "$PAKETLOSS % Paketverlust POP $ORT, $TEL." $MAILTO else echo "OK: $PAKETLOSS % packet loss!" fi rm poptest.$$ if [ "$ROUNDTRIP" = "" ] then ROUNDTRIP="9999.9/9999.9/9999.9" fi # Daten fuer Statistiken wegschreiben: echo "$TIME $DIALTRY $PAKETLOSS $ROUNDTRIP" >> $YYMM/$DD/$ORT # pppd killen: echo "hanging up..." killall pppd > /dev/null 2> /dev/null # Give him some time to die... sleep 10 fi done