问题
最近自己服务器访问别人的服务器,有时候会报超时错误,有时候又能够正常访问别人服务器。
思路
最开始猜测是网络不稳定造成的,但是自己没有收集什么时候超时,什么时候能正常访问别人服务器的日志,搞网络运维的同学根本不鸟我(其实,这活本来就是运维的事,有点小心塞,不过想起蜘蛛侠的名言)。
能力越大,责任就越大
写个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, differenceTime
死循环避免CPU飚高
循环里面最后添加一行:
import time time.sleep(0.2)
让线程休眠一段时间,这样就避免死循环占用cpu太高。
使用脚本
python3 windows_telnet.py 192.168.10.21 80
以后就可以通过这个脚本监测远程端口连接问题,并每天生成一个日志文件。
python学习交流群:125240963
原文:https://www.jianshu.com/p/e2e88cbb7572?utm_source=tuicool&utm_medium=referral
原文地址:https://www.cnblogs.com/pythonedu/p/9021130.html
时间: 2024-11-11 08:01:10