用python简单分析下ping时延

2019-08-15  本文已影响0人  余生还长你别慌

用python简单分析下ping时延

先用的secureCRT的vbs脚本,获取ping测试结果:

  1. 先是用crt的录制脚本功能录制下,然后批量复制即可。脚本如图:


    vbs截图.jpg
  2. 这里批量复制用的excel来生成的哈(这年头会用的工具就要杂一点,哇咔咔)

    (1)方法就是先所有要测试的站点IP复制到excel里,

    (2)然后每个IP前后复制进去脚本命令

    (3)最后用EXCEL的CONCATENATE()函数将几个表格合并即可。用python起始也是可以的哈。

将vbs脚本挂到某个能ping通站点的服务器或者电脑上,保存会话然后运行脚本即可(注意,断站的站点没在测试列,如果加上断站的站点IP,要加入一个判断才行)。

取出测试结果,用python进行分析。两个函数:1. get_ping_test(read_list)输入ping结果的列表,然后输出ping结果文件《站点ping结果统计.txt》;2.get_10ms_ping(read_list)输入ping结果的列表,然后输出平均时延大于10ms的结果文件《大于10ms的站点ping结果.txt》;中间顺便记录了总站点数X,大于10MS的站点数Y,大于30ms的站点数Z,最后顺便打印哈。具体代码如下:

# -*- encoding=UTF-8 -*-
__author__ = 'wjj1982'
__date__ = '2019/8/13 16:01'
__product__ = 'PyCharm'
__filename__ = 'ping-test'

import os


def get_ping_test(read_list):
    """从ping测试结果中去掉ping命令,直接获取ping测试结果行"""
    x = 0
    filename_out = '站点ping结果统计.txt'
    filename_output = open(filename_out, 'a')
    for value in read_list:
        if '--- ' in value:
            filename_output.write(value)
            x += 1
        elif 'min/avg/max/mdev' in value:
            filename_output.write(value)
    filename_output.close()
    return x


def get_10ms_ping(read_list):
    """ 从ping测试结果中获取ping测试结果大于10ms的所有行,并且统计下大于30ms的行数
    y存放的大于10ms的行数
    z存放的大于30ms的行数 """
    y = 0
    z = 0
    filename_out2 = '大于10ms的站点ping结果.txt'
    filename_output2 = open(filename_out2, 'a')
    for index, value in enumerate(read_list):
        if 'min/avg/max/mdev' in value:
            if float(value.split('=')[1].split('/')[1]) > 10:
                filename_output2.write(read_list[index - 2])
                filename_output2.write(value)
                y += 1
                if float(value.split('=')[1].split('/')[1]) > 30:
                    z += 1
    filename_output2.close()
    return y, z


def main():
    if os.path.exists('站点ping结果统计.txt'):
        os.remove('站点ping结果统计.txt')
    if os.path.exists('大于10ms的站点ping结果.txt'):
        os.remove('大于10ms的站点ping结果.txt')

    filename = input("输入ping测试结果文件:")
    filename_input = open(filename, 'r')
    # readlines读取文件后,循环一遍指针就到了最后了,不能第二遍循环,所以先用个列表复制下,把列表作为两个函数的入参
    read_list = []
    for line in filename_input.readlines():
        read_list.append(line)

    # 把列表作为两个函数的入参
    x = get_ping_test(read_list)
    y, z = get_10ms_ping(read_list)

    print('ping测试基站总数/大于10ms的基站数/大于30ms的基站数:{}/{}/{}'.format(x, y, z))
    filename_input.close()


if __name__ == '__main__':
    main()

上一篇下一篇

猜你喜欢

热点阅读