ping使用

使用shell ping一个网段

shell 复制代码
#!/bin/sh

for ib in $(seq 1 254); do
 ip="192.168.1.$ib"
  	(
        if  ping -c3 "$ip" >> 1.txt; then

        echo "$ip is alive"
        fi

    	) &
  	done
wait
在每次循环的最后,使用 & 将子 shell 放入后台执行,这样可以并行地进行多个 ping 命令。
在所有子 shell 都完成执行之前,使用 wait 命令等待所有子进程的结束。
脚本的实现原理是通过循环遍历 IP 地址范围,对每个 IP 地址执行 ping 命令,并根据退出状态码判断主机是否存活。由于使用了后台执行及 wait 命令,脚本能够并行地执行多个 ping 命令,提高了效率。最终,脚本会输出存活的主机的 IP 地址。

#############################

在使用pyhton演示一个

py 复制代码
import subprocess
from multiprocessing import Pool

def ping(ip):
    result = subprocess.run(["ping", "-c", "3", ip], stdout=subprocess.DEVNULL)
    if result.returncode == 0:
        print(f"{ip} is alive")

if __name__ == "__main__":
    pool = Pool(processes=200)  # 使用 200 个进程并行执行 ping 命令

    ips = [f"192.168.1.{i}" for i in range(1, 254)]

    pool.map(ping, ips)
    pool.close()
    pool.join()

使用了 Python 的 multiprocessing.Pool 类来创建进程池,并使用 map() 方法将任务分发给进程池中的多个进程并行执行。

实现原理:

  1. 定义一个 ping 函数,用于执行 ping 命令并判断主机存活。

  2. name == "main" 条件下,创建一个进程池对象 pool,设置并行执行的进程数为 16(可以根据需要进行调整)。

  3. 生成 IP 地址列表 ips,其中包含了要检测的 IP 地址范围。

  4. 使用 pool.map() 方法将任务分发给进程池中的多个进程,5. 并使用 ping 函数对每个 IP 地址进行 ping 操作。

  5. 最后,关闭进程池并等待所有进程完成任务(通过调用 pool.close() 和 pool.join())。

这样,利用 multiprocessing.Pool 类可以并行地执行多个 ping 命令,提高脚本的效率。请注意,根据系统资源和需要,你可以自行调整并行执行的进程数。

个人觉得Linux下python还是没有shell那么快

相关推荐
安科士andxe几秒前
深度解析安科士1X9-1.25G-60Km光模块,为何能成为长距低速通信首选?
网络·5g
用户8356290780512 分钟前
使用 Python 精准控制 Word 段落格式
后端·python
NULIWEIMENXIANG3 分钟前
ArcPy 程序调用 QGIS 进程实现几何拓扑检查
python·arcgis·gis
路由侠内网穿透3 分钟前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·开源
xingyuzhisuan4 分钟前
租用GPU服务器后,快速搭建Stable Diffusion WebUI并实现公网访问全指南
服务器·人工智能·云计算·gpu算力
rookie软工6 分钟前
Qt代理委托实现
开发语言·python·qt
love530love10 分钟前
Windows 本地部署 IDM-VTON 虚拟试衣:排障版教程
人工智能·windows·python·virtual try-on
Fairy要carry12 分钟前
项目05-手搓Agent之任务通信+任务编排的实现
服务器·前端·网络
忘忧记13 分钟前
pytest进阶参数化用法
前端·python·pytest
色空大师13 分钟前
【网站开发-java】
java·linux·服务器·开发语言·网站·搭建网站