barcode

Um zu überprüfen, wie schnell das Netzwerk ist, wurde ein kleines Script entwickelt

speedtest
#! /bin/bash
 
#########################################################################
##
## Name:        Speedtest
## Aufruf:      ./self_speedtest <host1> <host2> ...
## Author:      Patrick Schindelmann
## Version:     v0.1
## Erstellt:    24.03.10
## Beschreibung:Programm prüft die Hosts, ob Sie Linux oder Windows-
##              Maschinen sind. Bei den Linuxrechner wird ein 
##              Geschwindigkeitstest ausgeführt 
##
#########################################################################
 
 
if [ `id -u` = "0" ]
then
 
        if [ $# -eq 0 ]
        then
                echo Falscher Aufruf
                echo -e "\n\tusage: `basename $0` [host1]...[hostn]\n"
                exit 1
        fi
 
 
        #Pfad für die Datei, die bei der Geschwindigkeitsprüfung kopiert wird
        reffile=/usr/local/bin/datei
        # Parameter 1
        #hostname=$1
        # Variable fuer alle uebergebenen Hosts
        hosts=$*
 
 
        # Variable mit der Versionsnummer von SIRA-Systemen
#       sira_version=10.3
        # Variable mit der Versionsnummer von KORA-Systemen
#       kora_version=10.2
 
 
        status_error=0
        #status_error_rechner="0"
        status_erfolgreich=0
 
        # Zeitvariablen zur errechnung der Übertragungszeit
        v_zeitdiff=""
        v_zeitstart=""
        v_zeitstop=""
 
        # Variable, fuer die Größe des erzeugten Files 
        size=""
        #Übertragungszeit (mit Punkt getrennt)
        zeit_mp=""
 
        #Funktion, um eine Datei von 50MB zu erzeugen
        # Diese Datei enthält nur Nullen und wird bei Programmende wieder gelöscht
        # Die Größe der Datei kann über count (Wert in in kb; 50mb=51200kb) bestimmt werden
        function f_createfile(){
                echo "erstelle Referenzfile..."
                /bin/dd if=/dev/zero of=$reffile bs=1024 count=51200 > /dev/null 2>&1
                if [ -e $reffile ]
                then
                        echo -e "Referenzfile wurde erstellt\n"
                else
                        echo "Referenzfile wurde nicht gefunden"
                        exit 1
                fi
        }
 
        function f_size(){
                sizeohne=`ls -l $reffile | cut -d" " -f5`
                size=`echo "$sizeohne/1024/1024" | bc`
 
 
#               size=`ls -l $reffile | cut -d" " -f5`
        }
 
        function f_zeitbegin(){
                v_zeit=`date +%s%N`
                v_zeitstart=${v_zeit:0:13}
#               v_zeitstart=${v_zeit:8:5}
        }
 
        function f_zeitende(){
                v_zeit=`date +%s%N`
                v_zeitstop=${v_zeit:0:13}
#               v_zeitstop=${v_zeit:8:5}
        }
 
        function f_transfer(){
                /usr/bin/scp -q $reffile root@$hostname:/tmp
        }
 
        function f_transfer_rm(){
                /usr/bin/ssh root@$hostname rm /tmp/datei
        }
 
        function f_berechnung(){
                (( zeitdiff = $v_zeitstop - $v_zeitstart ))
 
                if [ $zeitdiff -lt 1000 ]
                then
                        zeit=0,${zeitdiff: -3}
                        zeit_mp=0.${zeitdiff: -3}
#                       echo $zeit
                elif [ $zeitdiff -gt 999 -a $zeitdiff -lt 10000 ]
                then
                        zeit=${zeitdiff:0:1},${zeitdiff: -3}
                        zeit_mp=${zeitdiff:0:1}.${zeitdiff: -3}
#                       echo $zeit
                elif [ $zeitdiff -gt 9999 ]
                then
                        zeit=${zeitdiff:0:2},${zeitdiff: -3}
                        zeit_mp=${zeitdiff:0:2}.${zeitdiff: -3}
#                       echo $zeit
                fi
 
                echo -e "\tZeit in Sekunden: $zeit"
        }
 
        function f_berechnung_rate(){
                f_size
#               echo "test: zeitmp: $zeit_mp"
#               echo "test: size  : $size"
                durchsatz=`echo "scale=4; $size/$zeit_mp" | bc`
                echo -e "\tGeschwindigkeit: $durchsatz MB/s"
 
        }
 
        echo
 
        f_createfile
 
        #setzen des SeperierungsZeichen, damit auch Listen in Form von host1,host2,host3 geprüft werden können
        IFS=$', \t\n'
 
        for hostname in $hosts
        do
                echo -e "Pruefe $hostname:"
                host_ttl=`/bin/ping -c1 $hostname 2>/dev/null| grep from | cut -d"=" -f3 | cut -d" " -f1`
                if [ -z $host_ttl ]
                then
                        echo -e "\t########## Host $hostname nicht ping-bar ##########" 
                        (( status_error++ ))
                        if [ $status_error -gt 1 ]
                        then
                                status_error_rechner="$status_error_rechner, $hostname"
                        else
                                status_error_rechner="$status_error_rechner $hostname"
                        fi
                else
                        if [ $host_ttl -ge 120 -a $host_ttl -le 130 ]
                        then
                                echo -e "\t$hostname:\tWindows"
 
                                (( status_error++ ))
 
                                if [ $status_error -gt 1 ]
                                then
                                        status_error_rechner="$status_error_rechner, $hostname"
                                else
                                        status_error_rechner="$status_error_rechner $hostname"
                                fi
 
                        else
                                if [ $host_ttl -ge 60 -a $host_ttl -le 70 ]
                                then
                                        #echo "erstelle File"
                                        #f_createfile
                                        #echo "beginn Zeitrechnung"
                                        f_zeitbegin
                                        #echo "Transfer"
                                        f_transfer
                                        #echo "ende Zeitrechnung"
                                        f_zeitende
                                        #echo "Zeitberechnung"
                                        f_berechnung
                                        f_berechnung_rate
 
                                        #echo $zeitdiff
 
 
                                        f_transfer_rm
 
                                        (( status_erfolgreich++ ))
                                else
                                        echo "Rechner falsch konfiguriert (falsche TTL)"
                                fi
#                       (( status_erfolgreich++ ))
                        fi
                fi
        done
 
        echo -e "\n\t Statusreport"
        echo -e "\t--------------"
        echo -e "\tErfolgreich:\t $status_erfolgreich"
        echo -e "\tFehler:\t\t $status_error"
        if [ $status_error -gt 0 ]
        then
                echo -e "\tPC mit Fehler: \t$status_error_rechner"
        fi
 
        echo -e "\n"
 
        # Referenzfile löschen auf dem ausführendem System
        rm $reffile
else
        echo "Programm muss als root ausgeführt werden"
        exit 1
fi