博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python测试远程端口连接时间
阅读量:6575 次
发布时间:2019-06-24

本文共 3337 字,大约阅读时间需要 11 分钟。

  hot3.png

人生苦短 我用Python

问题

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

思路

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

能力越大,责任就越大

写个python脚本,然后,在python脚本里面使用telnet去连接别人服务器对应的端口,然后,计算连接前后的时间长短。

解决

import osimport csvimport timeimport argparseimport telnetlibfrom datetime import datetime# 测试远程服务端口连接耗时# python3 windows_telnet.py 192.168.10.21 80parser = 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", encoding="utf-8", newline="") as csvfile:            fieldnames = [starTimeTitle, endTimeTitle, differenceTimeTitle]            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)            writer.writeheader()    with open(csvFileName, "a", encoding="utf-8", 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)

**Note:**写入csv文件时,需要设置encoding="utf-8",这样可以避免中文乱码问题。 这里涉及到几个Python的知识点:

  • 获取当前时间,计算时间差以及时间格式化
  • telnetlib的使用
  • 生成csv文件以及对文件读写
  • while True这个死循环里面需要避免cpu飙到100%问题,则需要在最后一行添加time.sleep(0.2) 接下来一个一个谈这些点:

Python3获取当前时间

from datetime import datetimestarTime = datetime.now() endTime = datetime.now()

这样获取出来的时间,我们一般需要在进行格式化处理才能够展现给用户看。

Python3时间格式化

在上面的基础上,我们可以,这样做

timeFormat = "%Y-%m-%d %H:%M:%S.%f"starTimeView = starTime.strftime(timeFormat)

使用strftime方法处理,具体可以查看Python3文档的部分。

Python3计算时间差

differenceTime = endTime -  starTime

对,就这样相减,就完事了。

telnetlib的使用

import telnetlibtn = telnetlib.Telnet("192.168.10.21", "80")

csv文件创建

import osimport csvcsvFileName = "{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 timetime.sleep(0.2)

让线程休眠一段时间,这样就避免死循环占用cpu太高。

使用脚本

python3 windows_telnet.py 192.168.10.21 80

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

参考: [16.3.  — Time access and conversions]()

转载于:https://my.oschina.net/fxtxz2/blog/1821711

你可能感兴趣的文章
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
查看>>
并发容器与框架——并发容器(一)
查看>>
学界 | 伯克利最新研究:用算法解决算法偏差?公平机器学习的延迟影响
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>
9.2. CentOS 区域设置
查看>>
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
Oracle——16用户、角色和权限
查看>>
从0实现NavigationController
查看>>
A Visual Git Reference
查看>>
Tomcat 关于表单提交数据量过大导致数据丢失的问题
查看>>
gitlab hook declined错误
查看>>
金融数据库
查看>>
翻了100个程序员的朋友圈, 发现个个都是套路王
查看>>
取消从上一界面push过来后,左上角的back按钮
查看>>
如何阅读别人的代码
查看>>
为什么 ++[[]][+[]]+[+[]] = 10?
查看>>
ContentProvider
查看>>