gpt4 book ai didi

python - 在 python 中快速 ping 扫描

转载 作者:太空狗 更新时间:2023-10-29 20:39:41 28 4
gpt4 key购买 nike

因此,我尝试使用 python 获得与使用 bash 脚本类似的结果。

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

我想做的是以相似的速度获得相同的结果。我遇到的每个版本的 python 脚本的问题是,与批处理脚本所需的几秒钟相比,它需要很长时间才能完成。

批处理文件大约需要 2 秒来扫描/24 网络,而我使用 python 脚本可以获得的最佳时间大约是 5-8 分钟。

最新版本的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()

我在 python 中尝试了几种不同的方法,但无法接近 bash 脚本的速度。

有什么建议吗?

最佳答案

Multiprocessing

#!/usr/bin/python2

import multiprocessing
import subprocess
import os

def pinger( job_q, results_q ):
DEVNULL = open(os.devnull,'w')
while True:
ip = job_q.get()
if ip is None: break

try:
subprocess.check_call(['ping','-c1',ip],
stdout=DEVNULL)
results_q.put(ip)
except:
pass

if __name__ == '__main__':
pool_size = 255

jobs = multiprocessing.Queue()
results = multiprocessing.Queue()

pool = [ multiprocessing.Process(target=pinger, args=(jobs,results))
for i in range(pool_size) ]

for p in pool:
p.start()

for i in range(1,255):
jobs.put('192.168.1.{0}'.format(i))

for p in pool:
jobs.put(None)

for p in pool:
p.join()

while not results.empty():
ip = results.get()
print(ip)

关于python - 在 python 中快速 ping 扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com