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那么快

相关推荐
淮北4947 分钟前
linux系统学习(10.shell基础)
linux·运维·服务器·学习
视觉震撼21 分钟前
RDP登录事件详细溯源分析脚本(兼容Windows PowerShell版本)
运维·网络·windows·网络安全·网络攻击模型·安全威胁分析·安全架构
是店小二呀33 分钟前
仓颉三方库开发实战:Simple HTTP Server 实现详解
网络·网络协议·http
Lolo_fi35 分钟前
记录Fedora43上安装向日葵
linux
洗紫36 分钟前
Python中的条件语句怎么使用?
python
北京耐用通信40 分钟前
从‘卡壳’到‘丝滑’:耐达讯自动化PROFIBUS光纤模块如何让RFID读写器实现‘零延迟’物流追踪?”
网络·人工智能·科技·物联网·网络协议·自动化
noravinsc43 分钟前
两台 centos 7.9 部署 pbs version 18.1.4 集群
linux·运维·centos
南汐汐月43 分钟前
重生归来,我要成功 Python 高手--day35 深度学习 Pytorch
pytorch·python·深度学习
你的微笑,乱了夏天1 小时前
linux centos常用命令整理
linux·运维·centos
java1234_小锋1 小时前
[免费]基于Python的深度学习豆瓣电影数据可视化+情感分析推荐系统(Flask+Vue+LSTM+scrapy)【论文+源码+SQL脚本】
python·信息可视化·flask·电影数据可视化