Varredura rápida de ping em python
Então, estou tentando obter resultados semelhantes usando python, como faço com um script bash.
Código para o script bash:
#!/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
O que eu gostaria de fazer é obter os mesmos resultados com velocidade semelhante. O problema que tive com todas as versões do script python é que leva muito tempo para ser concluído em comparação com os poucos segundos que o script em lote leva.
O arquivo em lote leva cerca de 2 segundos para varrer uma rede / 24, enquanto o melhor que posso obter com o script python é de 5 a 8 minutos.
Versão mais recente do script python:
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()
Eu tentei várias maneiras diferentes em python, mas não consigo chegar nem perto da velocidade do script bash.
Alguma sugestão?