用python简单分析下ping时延
2019-08-15 本文已影响0人
余生还长你别慌
用python简单分析下ping时延
先用的secureCRT的vbs脚本,获取ping测试结果:
-
先是用crt的录制脚本功能录制下,然后批量复制即可。脚本如图:
vbs截图.jpg -
这里批量复制用的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()