Linux系统连续ping多个局域网设备IP地址测试

用于ping局域网内设备,并把ping的结果保存到本地txt,测试局域网是否有丢包。
脚本最下方out_directory为输出ping结果保存的目录
segment为ping的网段
machine_list为需要ping的ip最后一位的列表
每半小时完成一次测试,循环保存测试结果
可用脚本把txt结果的最后一行提取出来,可方便的查看有无丢包

# @Author   : hai
# @File     : ping_new.py
# @Data     : 2022/7/14 13:53:49

import time
import os.path
import subprocess
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor


class PingTest:
    def __init__(self, segm, m_list, out_dir):
        self.ip_list = [segm+str(i) for i in m_list]
        self.out_dir = out_dir

    def ping(self, ip):
        while 1:
            start_time = time.strftime("%m_%d_%H_%M")
            Path(self.out_dir).mkdir(parents=True, exist_ok=True)
            out_file = ''.join([ip.replace('.', '_'), "__", start_time, ".txt"])
            out_path = os.path.join(self.out_dir, out_file)
            with open(f'{out_path}', 'a') as f:
                p = subprocess.Popen(f"ping -c 885 -i 2 {ip}", shell=True, stdout=subprocess.PIPE,
                                     stderr=subprocess.STDOUT, universal_newlines=True)
                while True:
                    ping_val = p.stdout.readline()
                    if ping_val == '' and p.poll() is not None:
                        break
                    if ping_val != '':
                        val = [time.strftime("%Y-%m-%d %H:%M:%S "), "     ", ping_val]
                        f.write(''.join(val))
                        f.flush()
            os.chmod(f'{out_path}', 0o766)

    def map_threadpool_bar(self, func):
        pool = ThreadPoolExecutor(max_workers=32)
        with pool as p:
            p.map(func, self.ip_list)


if __name__ == '__main__':
    out_directory = "./ping_data"
    segment = "172.16.1."
    machine_list = [21, 22, 23, 24, 29]
    pingtest = PingTest(segment, machine_list, out_directory)
    pingtest.map_threadpool_bar(pingtest.ping)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值