Python测试远程端口连接时间

发表于:2018-5-11 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:亚林瓜子    来源:新浪科技

#
Python
分享:
  人生苦短 我用Python
  问题
  最近自己服务器访问别人的服务器,有时候会报超时错误,有时候又能够正常访问别人服务器。
  思路
  最开始猜测是网络不稳定造成的,但是自己没有收集什么时候超时,什么时候能正常访问别人服务器的日志,搞网络运维的同学根本不鸟我(其实,这活本来就是运维的事,有点小心塞,不过想起蜘蛛侠的名言)。
  能力越大,责任就越大
  写个python脚本,然后,在python脚本里面使用telnet去连接别人服务器对应的端口,然后,计算连接前后的时间长短。
  解决
  import os
  import csv
  import time
  import argparse
  import telnetlib
  from datetime import datetime
  # 测试远程服务端口连接耗时
  # python3 windows_telnet.py 192.168.10.21 80
  parser = argparse.ArgumentParser()
  parser.add_argument("ip", type=str, help="ip")
  parser.add_argument("port", type=str, help="port")
  args = parser.parse_args()
  timeFormat = "%Y-%m-%d %H:%M:%S.%f"
  starTimeTitle = "开始连接时间"
  endTimeTitle = "结束连接时间"
  differenceTimeTitle = "连接总耗时"
  while True:
      starTime = datetime.now()
      starTimeView = starTime.strftime(timeFormat)
      print("开始连接:{0}".format(starTimeView))
      tn = telnetlib.Telnet(args.ip, args.port)
      endTime = datetime.now()
      endTimeView = endTime.strftime(timeFormat)
      print("连接完成:{0}".format(endTimeView))
      tn.close()
      print("连接结束")
      differenceTime = endTime -  starTime
      print("连接消耗:{0}".format(differenceTime))
      nowTime = datetime.now()
      csvFileName = "{0}.csv".format(nowTime.strftime("%Y-%m-%d"))
      if os.path.exists(csvFileName) is not True:
          with open(csvFileName, "w", newline="") as csvfile:
              fieldnames = [starTimeTitle, endTimeTitle, differenceTimeTitle]
              writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
              writer.writeheader()
      with open(csvFileName, "a", newline="") as csvfile:
          fieldnames = [starTimeTitle, endTimeTitle, differenceTimeTitle]
          writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
          writer.writerow({starTimeTitle : starTimeView, endTimeTitle : endTimeView, differenceTimeTitle : differenceTime})
      time.sleep(0.2)
  这里涉及到几个Python的知识点:
  ●获取当前时间,计算时间差以及时间格式化
  ●telnetlib的使用
  ●生成csv文件以及对文件读写
  ●在while True这个死循环里面需要避免cpu飙到100%问题,则需要在最后一行添加time.sleep(0.2)
  接下来一个一个谈这些点:
  Python3获取当前时间
  from datetime import datetime
  starTime = datetime.now()
   endTime = datetime.now()
  这样获取出来的时间,我们一般需要在进行格式化处理才能够展现给用户看。
  Python3时间格式化
  在上面的基础上,我们可以,这样做
  timeFormat = "%Y-%m-%d %H:%M:%S.%f"
  starTimeView = starTime.strftime(timeFormat)
  使用strftime方法处理,具体可以查看Python3文档的date.strftime(format)部分。
  Python3计算时间差
  differenceTime = endTime -  starTime
  对,就这样相减,就完事了。
  telnetlib的使用
  import telnetlib
  tn = telnetlib.Telnet("192.168.10.21", "80")
  csv文件创建
  import os
  import csv
  csvFileName = "{0}.csv".format(nowTime.strftime("%Y-%m-%d"))
  if os.path.exists(csvFileName) is not True:
      with open(csvFileName, "w", newline="") as csvfile:
          fieldnames = [starTimeTitle, endTimeTitle, differenceTimeTitle]
          writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
          writer.writeheader()
  这里是先判断文件是否存在,如果不存在,就创建一个csv文件,并且写好表头。
  csv文件追加
  with open(csvFileName, "a", newline="") as csvfile:
      fieldnames = [starTimeTitle, endTimeTitle, differenceTimeTitle]
      writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
      writer.writerow({starTimeTitle : starTimeView, endTimeTitle : endTimeView, differenceTimeTitle : differenceTime})
  死循环避免CPU飚高
  循环里面最后添加一行:
  import time
  time.sleep(0.2)
  让线程休眠一段时间,这样就避免死循环占用cpu太高。
  使用脚本
  python3 windows_telnet.py 192.168.10.21 80
  以后就可以通过这个脚本监测远程端口连接问题,并每天生成一个日志文件。



上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号