作者:小荷蛋蛋图_945 | 来源:互联网 | 2023-10-16 12:16
点击上方蓝字 ● 关注捷创源科技
问题描述
在某些问题背景下,需要确认是否多台终端在线,也就是会使用我们牛逼的ping这个命令,做一些的ping操作,如果需要确认的设备比较少,也还能承受。倘若,在手中维护的设备很多,那么这无疑会变成一个恼人的问题。脚本的作用就凸显了。另外,我们需要使用多线程的一种措施,否则单线程很难在很短的时间内拿到统计结果。
应用背景
有多台设备需要维护,周期短,重复度高;
单台设备配备多个IP,需要经常确认网络是否通常;
等等其他需要确认网络是否畅通的地方
1.采用单线程问题解决
import time
import os
status1 = 'ping success'
status2 = 'ping fail'
def pingComputer():
for i in range(1, 256):
host = '192.168.2.' + str(i)
nowTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
p = os.popen("ping " + host + " -n 2")
line = p.read()
# print(line)
if "无法访问目标主机" in line:
print(nowTime, host, status2)
else:
print(nowTime, host, status1)
"""
========================================
主函数功能测试
========================================
"""
if __name__ == '__main__':
pingComputer()
"""=== coding: UTF8 ==="""
# 线程池:一次性开辟一些线程,我们用户直接给线程池提交任务,线程任务的调度交给线程池来完成
from concurrent.futures import ThreadPoolExecutor
import time
import os
# 成功标志状态
status1 = 'ping success'
# 失败标志状态
status2 = 'ping fail'
# 成功ping通IP列表
listHostSuccess = []
# 失败ping不通IP列表
listHostFail = []
def pingComputer(host):
nowTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
p = os.popen("ping " + host + " -n 2")
line = p.read()
# print(line)
if "无法访问目标主机" in line:
listHostFail.append(host)
print(nowTime, host, status2)
else:
listHostSuccess.append(host)
print(nowTime, host, status1)
def printResult():
print(f"ping通:{len(listHostSuccess)}个")
print(listHostSuccess)
print(f"ping不通:{len(listHostFail)}个")
print(listHostFail)
"""
========================================
主函数功能测试
========================================
"""
if __name__ == '__main__':
# 创建线程池,50个线程
with ThreadPoolExecutor(50) as pool:
for i in range(1, 256): # 255个IP
pool.submit(pingComputer, host=f"192.168.2.{i}")
# 等待线程池中的任务全部执行完毕,才能继续执行(守护)
print("完毕")
# 打印结果
printResult()
关注上面微信公众号“捷创源科技”,每天获取技术干货,让我们一起成长!