Schneller Ping-Sweep in Python

Daher versuche ich, mit Python ähnliche Ergebnisse zu erzielen wie mit einem Bash-Skript.

Code für das Bash-Skript:

    #!/bin/bash

    for ip in $(seq 1 254); do
        ping -c 1 10.10.10.$ip | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 &
    done

Das, was ich tun möchte, ist, die gleichen Ergebnisse mit ähnlicher Geschwindigkeit zu erzielen. Das Problem, das ich bei jeder Version des Python-Skripts hatte, ist, dass es sehr lange dauert, bis es fertig ist, verglichen mit den wenigen Sekunden, die das Batch-Skript benötigt.

Die Batch-Datei benötigt ca. 2 Sekunden, um ein / 24-Netzwerk zu durchsuchen. Das Beste, was ich mit dem Python-Skript erreichen kann, sind ca. 5-8 Minuten.

Neueste Version des Python-Skripts:

import subprocess

cmdping = "ping -c1 10.10.10."

for x in range (2,255):
    p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)

    while True:
        out = p.stderr.read(1)
        if out == '' and p.poll() != None:
            break
        if out != '':
            sys.stdout.write(out)
            sys.stdout.flush()

Ich habe verschiedene Methoden in Python ausprobiert, komme aber nicht an die Geschwindigkeit des Bash-Skripts heran.

Irgendwelche Vorschläge?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage