Python测试远程端口连接时间

发布时间:2022-03-29 09:49:50 人气:181 作者:多测师

  最近自己服务器访问别人的服务器,有时候会报超时错误,有时候又能够正常访问别人服务器。

  思路

  最开始猜测是网络不稳定造成的,但是自己没有收集什么时候超时,什么时候能正常访问别人服务器的日志,搞网络运维的同学根本不鸟我(其实,这活本来就是运维的事,有点小心塞,不过想起蜘蛛侠的名言)。

  能力越大,责任就越大

  写个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测试远程端口连接时间

  这里涉及到几个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

  以后就可以通过这个脚本监测远程端口连接问题,并每天生成一个日志文件。

  以上内容为大家介绍了python中的反斜杠,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/

返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线