Created
May 21, 2025 13:46
-
-
Save mafulafunk/d59d878d703d114502e0bae8a3643a51 to your computer and use it in GitHub Desktop.
SMTP Test Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| if [ -z "$BASH_VERSION" ]; then | |
| echo "Dieses Skript muss mit bash ausgeführt werden. Bitte verwenden Sie: bash $0" | |
| exit 1 | |
| fi | |
| # Protokolldateiname mit Zeitstempel erstellen | |
| TIMESTAMP=$(date +"%Y%m%d_%H%M%S") | |
| LOG_FILE="connection_test_${TIMESTAMP}.log" | |
| TCPDUMP_FILE="tcpdump_${TIMESTAMP}.pcap" | |
| # Fest kodierte Server | |
| SMTP_HOST1="smtp.strato.de" | |
| SMTP_PORT1="587" | |
| SMTP_HOST2="smtp.mailbox.org" | |
| SMTP_PORT2="587" | |
| TRIES=100 | |
| TIMEOUT=5 | |
| # Statistik-Zähler für beide Server | |
| SUCCESS1=0 | |
| FAIL1=0 | |
| SUCCESS2=0 | |
| FAIL2=0 | |
| # Funktion zum Sammeln von Systeminformationen | |
| collect_system_info() { | |
| { | |
| echo "=== SYSTEMINFORMATIONEN ===" | |
| echo "Datum und Uhrzeit: $(date)" | |
| echo "" | |
| echo "=== NETZWERKINFORMATIONEN ===" | |
| echo "IP-Adressen:" | |
| ifconfig | grep "inet " || ip addr show | grep "inet " | |
| echo "" | |
| echo "DNS-Server:" | |
| cat /etc/resolv.conf | |
| echo "" | |
| echo "=== TRACEROUTE ZU DEN SERVERN ===" | |
| echo "Traceroute zu $SMTP_HOST1:" | |
| traceroute -n "$SMTP_HOST1" 2>&1 | |
| echo "" | |
| echo "Traceroute zu $SMTP_HOST2:" | |
| traceroute -n "$SMTP_HOST2" 2>&1 | |
| echo "" | |
| echo "=== PING TESTS ===" | |
| echo "Ping zu $SMTP_HOST1:" | |
| ping -c 5 "$SMTP_HOST1" 2>&1 | |
| echo "" | |
| echo "Ping zu $SMTP_HOST2:" | |
| ping -c 5 "$SMTP_HOST2" 2>&1 | |
| echo "" | |
| # Die folgenden Sektionen wurden entfernt: | |
| # - NETZWERK-PEERING UND RESSOURCEN (speedtest-cli) | |
| # - SYSTEM RESSOURCEN (CPU/RAM) | |
| # - TIMEOUT TOOL INFO (gtimeout/timeout) | |
| # - Netcat (nc) Info | |
| } > "${LOG_FILE}" | |
| echo "Systeminformationen in ${LOG_FILE} gespeichert" | |
| } | |
| # tcpdump starten, falls verfügbar | |
| start_tcpdump() { | |
| if command -v tcpdump >/dev/null 2>&1; then | |
| echo "Starte tcpdump, speichere in ${TCPDUMP_FILE}..." | |
| echo "Bitte einmalig das sudo-Passwort eingeben für tcpdump:" | |
| # Sudo-Rechte einmalig erhalten | |
| sudo -v | |
| sudo tcpdump -i any -w "${TCPDUMP_FILE}" "host $SMTP_HOST1 or host $SMTP_HOST2" & | |
| TCPDUMP_PID=$! | |
| echo "tcpdump gestartet mit PID ${TCPDUMP_PID}" | |
| # Kurze Pause, um sicherzustellen, dass tcpdump gestartet ist | |
| sleep 2 | |
| else | |
| echo "tcpdump ist nicht installiert. Keine Netzwerkpakete werden aufgezeichnet." | |
| TCPDUMP_PID="" | |
| fi | |
| } | |
| # tcpdump stoppen | |
| stop_tcpdump() { | |
| if [ -n "$TCPDUMP_PID" ]; then | |
| echo "Stoppe tcpdump..." | |
| # Verwende bereits authentifizierte sudo-Session | |
| sudo kill -9 $TCPDUMP_PID 2>/dev/null || sudo pkill -9 tcpdump 2>/dev/null | |
| echo "tcpdump gestoppt. Aufzeichnung gespeichert in ${TCPDUMP_FILE}" | |
| fi | |
| } | |
| # Sicherstellen, dass wir tcpdump bei Skriptabbruch stoppen | |
| trap 'stop_tcpdump; echo "Skript wurde unterbrochen. Bereinige..."; exit 1' INT TERM | |
| # Sammle Systeminformationen | |
| collect_system_info | |
| # Starte tcpdump | |
| start_tcpdump | |
| # Start der Tests | |
| { | |
| echo "=== VERBINDUNGSTESTS ===" | |
| echo "Test gestartet am $(date)" | |
| echo "SMTP Server 1: $SMTP_HOST1:$SMTP_PORT1" | |
| echo "SMTP Server 2: $SMTP_HOST2:$SMTP_PORT2" | |
| echo "Anzahl Versuche pro Server: $TRIES" | |
| echo "Timeout pro Verbindung: $TIMEOUT Sekunden" | |
| echo "--------------------------------------" | |
| } | tee -a "${LOG_FILE}" | |
| # Prüfen ob netcat installiert ist | |
| if ! command -v nc >/dev/null 2>&1; then | |
| echo "netcat (nc) ist nicht installiert. Bitte installieren Sie netcat." | tee -a "${LOG_FILE}" | |
| stop_tcpdump | |
| exit 1 | |
| fi | |
| # Verwende gtimeout wenn verfügbar, sonst timeout | |
| TIMEOUT_CMD="timeout" | |
| if command -v gtimeout >/dev/null 2>&1; then | |
| TIMEOUT_CMD="gtimeout" | |
| fi | |
| # Testen beider Server im Wechsel | |
| for ((i=1; i<=TRIES; i++)); do | |
| echo "Durchlauf $i/$TRIES:" | tee -a "${LOG_FILE}" | |
| # Aktuelle Zeit für jede Verbindung protokollieren | |
| CURRENT_TIME=$(date +"%H:%M:%S") | |
| # Server 1 testen | |
| echo " [$CURRENT_TIME] Teste $SMTP_HOST1:$SMTP_PORT1..." | tee -a "${LOG_FILE}" | |
| CONN_OUTPUT=$($TIMEOUT_CMD $TIMEOUT nc -zv "$SMTP_HOST1" "$SMTP_PORT1" 2>&1) | |
| if [ $? -eq 0 ]; then | |
| ((SUCCESS1++)) | |
| echo " $SMTP_HOST1:$SMTP_PORT1 - Erfolg" | tee -a "${LOG_FILE}" | |
| else | |
| ((FAIL1++)) | |
| echo " $SMTP_HOST1:$SMTP_PORT1 - Fehler (Ausgabe: $CONN_OUTPUT)" | tee -a "${LOG_FILE}" | |
| fi | |
| # Kurze Pause | |
| sleep 0.5 | |
| # Aktuelle Zeit für zweite Verbindung | |
| CURRENT_TIME=$(date +"%H:%M:%S") | |
| # Server 2 testen | |
| echo " [$CURRENT_TIME] Teste $SMTP_HOST2:$SMTP_PORT2..." | tee -a "${LOG_FILE}" | |
| CONN_OUTPUT=$($TIMEOUT_CMD $TIMEOUT nc -zv "$SMTP_HOST2" "$SMTP_PORT2" 2>&1) | |
| if [ $? -eq 0 ]; then | |
| ((SUCCESS2++)) | |
| echo " $SMTP_HOST2:$SMTP_PORT2 - Erfolg" | tee -a "${LOG_FILE}" | |
| else | |
| ((FAIL2++)) | |
| echo " $SMTP_HOST2:$SMTP_PORT2 - Fehler (Ausgabe: $CONN_OUTPUT)" | tee -a "${LOG_FILE}" | |
| fi | |
| sleep 0.5 | |
| done | |
| # Stoppe tcpdump | |
| stop_tcpdump | |
| # Erfolgsraten berechnen | |
| SUCCESS_RATE1=$(echo "scale=2; $SUCCESS1*100/$TRIES" | bc) | |
| FAIL_RATE1=$(echo "scale=2; $FAIL1*100/$TRIES" | bc) | |
| SUCCESS_RATE2=$(echo "scale=2; $SUCCESS2*100/$TRIES" | bc) | |
| FAIL_RATE2=$(echo "scale=2; $FAIL2*100/$TRIES" | bc) | |
| # Ergebnisse ausgeben | |
| { | |
| echo "--------------------------------------" | |
| echo "Testergebnisse:" | |
| echo "--------------------------------------" | |
| echo "Host: $SMTP_HOST1" | |
| echo "Port: $SMTP_PORT1" | |
| echo "Erfolgreiche Verbindungen: $SUCCESS1/$TRIES (${SUCCESS_RATE1}%)" | |
| echo "Fehlgeschlagene Verbindungen: $FAIL1/$TRIES (${FAIL_RATE1}%)" | |
| echo "--------------------------------------" | |
| echo "Host: $SMTP_HOST2" | |
| echo "Port: $SMTP_PORT2" | |
| echo "Erfolgreiche Verbindungen: $SUCCESS2/$TRIES (${SUCCESS_RATE2}%)" | |
| echo "Fehlgeschlagene Verbindungen: $FAIL2/$TRIES (${FAIL_RATE2}%)" | |
| echo "--------------------------------------" | |
| echo "Test abgeschlossen am $(date)" | |
| echo "" | |
| echo "Alle Logs wurden in ${LOG_FILE} gespeichert" | |
| if [ -n "$TCPDUMP_PID" ]; then | |
| echo "Netzwerkdaten wurden in ${TCPDUMP_FILE} gespeichert" | |
| fi | |
| echo "" | |
| echo "HINWEIS ZUR VERWENDUNG DER PROTOKOLLDATEN:" | |
| echo "Um die Protokolldaten an den Support zu senden, fügen Sie bitte folgende Dateien bei:" | |
| echo "1. ${LOG_FILE} - Enthält alle Testergebnisse und Systeminformationen" | |
| if [ -n "$TCPDUMP_PID" ]; then | |
| echo "2. ${TCPDUMP_FILE} - Enthält die Netzwerkpakete (tcpdump)" | |
| echo " Mit dem Befehl 'tcpdump -r ${TCPDUMP_FILE}' können Sie sich die Pakete ansehen" | |
| fi | |
| } | tee -a "${LOG_FILE}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment