Also, ich versuche, ähnliche Ergebnisse mit Python zu bekommen, wie ich mit einem Bash-Skript.Schneller Ping-Sweep in Python
-Code für den 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
Die Sache, die ich tun möchte, ist die gleichen Ergebnisse mit ähnlicher Geschwindigkeit. Das Problem, das ich mit jeder Version des Python-Skripts hatte, ist, dass es im Vergleich zu den wenigen Sekunden, die das Batch-Skript benötigt, sehr lange dauert.
Die Batch-Datei dauert etwa 2 Sekunden, um ein/24 Netzwerk zu fegen, während das Beste, was ich mit dem Python-Skript bekommen kann, etwa 5-8 Minuten ist.
Die neueste Version des Python-Skript:
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 verschiedene Möglichkeiten in Python versucht haben, kann aber nicht überall in der Nähe der Geschwindigkeit des Bash-Skript bekommen.
Irgendwelche Vorschläge?
Können Sie das konkretisieren - wie lange ist „sehr lange“ im Vergleich zu „wenigen Sekunden“? –
Das Und-Zeichen am Ende des Bash-Skripts bewirkt, dass die Prozesse im Hintergrund ausgeführt werden. Ihr Python-Skript führt sie alle nacheinander aus. – Blender
Die Batch-Datei dauert etwa 2 Sekunden, um ein/24-Netzwerk zu durchsuchen, während das Beste, was ich mit dem Python-Skript bekommen kann, etwa 5-8 Minuten ist. –