Linux环境下使用Python批量ping检测10.1.1.1~10.1.1.254主机连通性
Linux环境Python批量ping连通性检测实现
核心思路
调用Linux原生ping命令做探测,用多进程并发提速,避免单线程串行检测耗时过长,最终直接输出要求格式的结果。
可用代码
import subprocess from multiprocessing import Pool def check_host(ip): # 发送1个ICMP包,超时1秒,丢弃所有命令输出 run_res = subprocess.run( ["ping", "-c", "1", "-W", "1", ip], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL ) if run_res.returncode == 0: print(f"the pc {ip} Pinging") else: print(f"the pc {ip} Not Pinging") if __name__ == "__main__": # 生成10.1.1.1到10.1.1.254的IP列表 ip_range = [f"10.1.1.{i}" for i in range(1, 255)] # 开20个并发进程,可根据自身设备性能调整数值 with Pool(processes=20) as process_pool: process_pool.map(check_host, ip_range)
使用方法
- 将上述代码保存为
ping_scan.py - 在终端执行命令
python3 ping_scan.py即可直接得到对应格式的检测结果
参数说明
ping命令参数-c 1:仅发送1个探测包,减少不必要的等待ping命令参数-W 1:超时时间设为1秒,超过时长无回包直接判定不通- 并发进程数可调整,最高可设为254,数值越高整体检测速度越快,同时占用系统资源越多
如果需要严格按照IP从小到大的顺序输出结果,可以把检测结果先存入字典,全部检测完成后按IP排序再批量打印,避免并发导致的输出顺序混乱。
内容的提问来源于stack exchange,提问作者haymovich
相关产品推荐
相关产品推荐

