{{ :home-harmening:tools:netzwerk:netzwerktestbalkendiagramm.png?400|}} ==== Skript um das Netzwerk zu testen ==== Ich stand vor dem Problem, dass ich die einen kompletten Standort durchmessen sollte. Der Vorteil hier \\ war die Infrastruktur. Ein Linuxserver und viele Linux CLients über mehrere Etagen und Gebäude die alle mit dem Server verbunden waren.\\ \\ Auf allen Systemen war ein entsprechender Nutzer eingerichtet der die passenden Bereichtigungen für diese Aufgabe hatte.\\ \\ Mein Ziel war ein Ergebnis auf meinem Laptop im Hotel zu erhalten. Also VPN aufbauen und starten!\\ \\ * Vom Administrationspc werden SSH Verbindungen zu allen Clients hergestellt * Es werden iperf3 und sshpass installiert * Es wird eine UDP Messung zum den Server durchgeführt * Das Ergebnis wird in einem Logfile gespeichert und zum Administationspc gesendet * Nach Abschluss aller Messungen werden die Logfiles analysiert und mit php wird ein grafisch aufbereitetes html Dokument erstellt \\ Um das Skript nutzen zu können müssen im Kopf zuvor einige Variablen festgelegt werden\\ * str_sshUser = Benutzer der einen SSH Zugang zu allen Systemen besitzt * str_sshPass = Passwort des Benutzers * lst_clients = Liste der Clients die getestet werden sollen (z.B 10.0.013 10.0.1.14 ... 10.0.1.220) * str_server = Adresse des iperf3 Servers gegen den getestet werden soll * bol_json = Auskommentieren wenn die Webansicht nicht benötigt wird \\ Vor beginn muss sich auf den Server aufgeloggt werden und der iper3 Server gestartet werden. iperf3 -s \\ === Ordnerstruktur === ../networkTest/networktest.sh present.php STANDORTORDNER/ IP1.txt IP2.txt IPn.txt === networkTest.sh === #!/bin/bash # Skript führt eine Netzwerkmessung mit iperf3 an den angegebenen Rechnern durch #Variablen str_server="iperf3 SERVER" #Server IP lst_clients="Client1 Client2 ..." #Lister der Clients str_sshUser="SSHUSER" #SSH Benutzer str_sshPass="SSHPASS" #SSH Passwort str_baseDir=$(dirname "$(readlink -f "$0")")/ #Ausgabeverzeichnis bol_json="--json" # Kommentar entfernen für Ausgabe im json Format? RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' str_myIP=$(hostname -I|awk '{print $1}') read -p "Geben Sie bitte den Standort an (Berlin): " str_location str_output=${str_baseDir}${str_location}/ # Dies ist das Skript was auf die Clients kopiert wird str_networkTest=$(cat << EOF #!/bin/bash # Installiere requirements if ! dpkg --list | grep iperf3 &> /dev/null ; then echo -e "${str_sshPass}\n" | sudo -S apt-get install iperf3 -y ; fi if ! dpkg --list | grep sshpass &> /dev/null ; then echo -e "${str_sshPass}\n" | sudo -S apt-get install sshpass -y ; fi if [ -f /tmp/ergebnis.txt ]; then echo -e "${str_sshPass}\n" | sudo -S rm /tmp/ergebnis.txt ; fi # Führe die Messung durch und speicher das Ergebnis im Logfile iperf3 -c ${str_server} -u -b 100M -i 12 --logfile /tmp/ergebnis.txt ${bol_json} # Kopiere das Logfile auf den Adminclient sshpass -p "${str_sshPass}" scp -o StrictHostKeyChecking=no /tmp/ergebnis.txt ${str_sshUser}@${str_myIP}:${str_output}\$1.txt EOF ) echo -e "$str_networkTest" > /tmp/networkTest.sh # Variablen Prüfung if [ -z "${str_server}" ]; then read -p "Geben Sie bitte den iperf3 Server ein: " str_server; fi if [ -z "${lst_clients}" ]; then read -p "Geben Sie die iperf3 Client Liste ein (Client1 Client2 ... ClientN): " lst_clients; fi if [ -z "${str_sshUser}" ]; then read -p "Geben Sie bitte den SSH Benutzer ein: " str_sshUser; fi if [ -z "${str_server}" ]; then read -p -s "Geben Sie bitte das SSH Passwort ein: " str_sshPass; fi # Output Verzeichnis erstellen if [ ! -d "${str_output}" ]; then mkdir -p ${str_output}; fi # Pakete installieren if ! dpkg --list | grep sshpass &> /dev/null; then apt-get install ssh sshpass -y ;fi if ! dpkg --list | grep php &> /dev/null; then apt-get install ssh php -y ;fi # Client initialisieren int_clients=0 int_successClients=0 # Nacheinander werden die Client getestet for str_client in ${lst_clients}; do printf "${YELLOW}Connection to ${str_client}...${NC}" int_clients=$((int_clients + 1)) if ping -c 3 ${str_client} &> /dev/null ; then # Kopiere das Testskript auf den Client sshpass -p "${str_sshPass}" scp -o StrictHostKeyChecking=no /tmp/networkTest.sh ${str_sshUser}@${str_client}:~/ # FÜhre den Test auf dem Client durch sshpass -p "${str_sshPass}" ssh -o StrictHostKeyChecking=no ${str_sshUser}@${str_client} "chmod +x ~/networkTest.sh ; echo -e \"${str_sshPass}\\n\" | sudo -S ~/networkTest.sh ${str_client}" # Entferne das Skript wieder sshpass -p "${str_sshPass}" ssh -o StrictHostKeyChecking=no ${str_sshUser}@${str_client} "rm ~/networkTest.sh" printf "${GREEN}\rConnection success! Result stored in ${str_output}${str_client}.txt${NC}\n" int_successClients=$((int_successClients + 1)) else printf "${RED}\rCant connect to ${str_client}...\n${NC}" fi done echo printf "${YELLOW}${int_successClients} from ${int_clients} are successful!\n" # Erstelle html zusammenfassung cp ${str_baseDir}/present.php ${str_output}/ php ${str_output}/present.php > ${str_output}/present.html \\ === present.php === Netzwerkmessung Standort <?php echo $folderName; ?>

Netzwerkmessung Standort

Diagramme der Ergebnisse:

Bandbreite (Mbit/s)

Jitter (ms)

Gesendete und Empfangene Pakete

Zusammenfassung der Messwerte:

Datei Client IP Server IP Bandbreite (Mbit/s) Jitter (ms) Gesendete Pakete Empfangene Pakete