27. April 2024

Ping/Speedtest inkl. Ausgabe in Datei

Hier ist ein Python Programm, welches alle 20 Sekunden ein Speedtest an 5 Domains macht (im Quellcode nach belieben ändern) und alle 2 Minuten ein Speedtest macht.

Alle Ergebnisse werden in einer Datei ausgegeben und zusätzlich im Terminal angezeigt.

Benötigte Module


Wenn beim Speedtest ein Error 403:Forbidden Fehler kommt

s = speedtest.Speedtest(secure=True)

Secure auf True setzen

Quellcode


import subprocess
import time
import speedtest

def ping_test(target_host):
    # Führe den Ping-Befehl aus (Anpassung für dein Betriebssystem erforderlich)
    try:
        subprocess.check_output(['ping', '-c', '4', target_host], stderr=subprocess.STDOUT, text=True, timeout=10)
        return None  # Erfolgreicher Ping
    except subprocess.CalledProcessError as e:
        return f"Error: {e.output}"
    except subprocess.TimeoutExpired:
        return "Error: Ping timed out"

def run_speedtest():
    st = speedtest.Speedtest()
    download_speed = st.download() / 1024 / 1024  # Convert to Mbps
    upload_speed = st.upload() / 1024 / 1024  # Convert to Mbps
    result = f"Download Speed: {download_speed:.2f} Mbps, Upload Speed: {upload_speed:.2f} Mbps"
    print(result)
    return result

def main():
    target_domains = ['google.com', 'example.com', 'github.com', 'stackoverflow.com', 'reddit.com']
    all_domains_file = 'all_domains.txt'
    sorted_domains_file = 'sorted_domains.txt'
    speedtest_file = 'speedtest_results.txt'
    tests_count = 0
    failed_count = 0
    failed_count_per_hour = 0
    start_time = time.time()

    print("Das Programm läuft...")

    while True:
        for target_domain in target_domains:
            # Führe den Ping-Test für jede Domain durch
            result = ping_test(target_domain)

            # Inkrementiere die Anzahl der durchgeführten Tests
            tests_count += 1

            if result is not None:
                # Erhöhe die Anzahl der fehlgeschlagenen Pings
                failed_count += 1
                failed_count_per_hour += 1

                # Aktuelles Datum und Uhrzeit hinzufügen
                timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
                result_with_timestamp = f"{timestamp} - {target_domain} - {result}\n"

                # Ergebnisse in die gemeinsame Datei schreiben
                with open(all_domains_file, 'a') as file:
                    file.write(result_with_timestamp)

                print(f"Fehlgeschlagener Ping für {target_domain} um {timestamp}. Ergebnis:\n{result}")

            # Wenn alle 100 Tests erreicht sind, speichere das Ergebnis auch in der Log-Datei
            if tests_count % 100 == 0:
                with open(f'all_pings_{time.strftime("%Y-%m-%d_%H-%M-%S")}.log', 'a') as log_file:
                    log_file.write(f"Test #{tests_count} - {time.strftime('%Y-%m-%d %H:%M:%S')}\n{result}\n\n")

        # Sortiere die Domains und speichere sie in einer separaten Datei
        sorted_domains = sorted(target_domains)
        with open(sorted_domains_file, 'w') as sorted_file:
            sorted_file.write('\n'.join(sorted_domains))

        # Alle 2 Minuten Speedtest durchführen
        if tests_count % 6 == 0:
            speedtest_result = run_speedtest()
            with open(speedtest_file, 'a') as speedtest_log:
                speedtest_log.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {speedtest_result}\n")

        # Berechne den Prozentsatz der fehlgeschlagenen Pings
        success_rate = ((tests_count - failed_count) / tests_count) * 100 if tests_count > 0 else 100
        print(f"Gesamtanzahl der Tests: {tests_count}, Erfolgsrate: {success_rate:.2f}%")

        # Berechne die vergangene Zeit in Stunden
        elapsed_hours = (time.time() - start_time) / 3600

        # Aktualisiere die Gesamtanzahl der fehlgeschlagenen Pings pro Stunde
        failed_count_per_hour = 0

        # Warte 20 Sekunden, bevor der nächste Durchlauf beginnt
        time.sleep(20)

if __name__ == "__main__":
    main()
  1. Quellcode kopieren und Terminal öffnen, und Nano öffnen

    2.Quellcode einfügen und ggf. Domains die angepingt werden sollen ändern

3.  Nano mit strg+x schließen und mit „Y“ Datei in test.py speichern.

4. test.py Datei ausführbar machen

5. Programm starten