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, 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

Python测试远程端口连接时间的相关文章

macos环境测试远程端口是否通

ping端口:nc -vz -w 2 www.baidu.com 8080 NAMEnc -- arbitrary TCP and UDP connections and listens DESCRIPTIONThe nc (or netcat) utility is used for just about anything under the sun involving TCP or UDP. It can open TCP connections, send UDP packets, lis

centos7更改远程端口

centos7更改远程端口 一.创建个普通账户(useradd work),给普通账户创建密码(password work) 二.查看应有的软件是否安装 1.查看semanager是否安装执行下面命令:rpm -qa | grep semanager 如果没有安装执行下面命令:yum -y install policycoreutils-python 三.修改ssh配置文件 1.vi /etc/ssh/sshd_config ①首先把Port=22注释去掉,再把端口22更改为你想更改的端口. ②

python命令启动端口

1.python模拟端口解决防火请验证问题 如果生产环境中验证防火墙时对方服务却没启动,这时候使用python命令模拟端口则是十分有效的,例如远端IP为192.168.0.100,在远端服务器上执行下面命令 python -m SimpleHTTPServer PORT PORT为远端服务的端口,例如这边假设是8080 然后再该端测试远端端口时候开通防火墙 telnet 192.168.0.100 8080 2.python启动mini WEB服务 在linux系统想要共享文件,使用python

Linux修改ssh远程端口

首先我们简单说下为什么要修改ssh远程端口号呢? 我们装好系统后linux 的ssh远程端口默认是用的是22端口,但是由于安全考虑,经常我们安装好系统后一般都会考虑把原来的22端口更改为另外的端口. 本文将以端口改为60022为例,讲解一下具体操作过程.(这个端口号,你可以根据自己需求更改,本文以60022为例.) [[email protected] ~]$ vi /etc/ssh/sshd_config 执行上条命令后可以看到下图的配置页面,找到Port22,然后将端口22改为你想要的端口号

Python查看远程主机端口是否开放以及BashShell实现

无论是选择Python还是选择Bash Shell都可以很容易检测远程主机端口是否开放,下面的Python例子纯属锦上添花,仅供参考! 源码可参见Github:https://raw.githubusercontent.com/DingGuodong/LinuxBashShellScriptForOps/master/functions/net/tcp/port/checkRemoteHostPortStatus.py 使用方法:如果用户使用不带参数的方式执行,则需要用户修改Python脚本参数

使用python测试sphinx(coreseek)做全文索引

coreseek是一个基础sphinx的中文索引工具,我今天写一下关于使用python做测试的方式. coreseek安装,连接mysql的配置此处不赘述,很多人写过这方面的博客,单纯讲python连接sphinx.当然我们先启动sphinx进程,./searched python要连接sphinx肯定是需要第三方库的,你可以去pypi找,当然sphinx已经告诉我们了,我们去/home/lpj/soft/coreseek-3.2.14/csft-3.2.14/api (我下载的coreseek

linux 检测远程端口是否打开

检测远程端口是否打开 常用telnet 110.101.101.101 80方式测试远程主机端口是否打开. 除此之外还可以使用: 方法1.nmap ip -p port 测试端口 nmap ip 显示全部打开的端口 根据显示close/open确定端口是否打开. 方法2. nc -v host port 端口未打开返回状态为非0

python测试rabbitmq的消息收发

send.py #!/usr/bin/env python    # -*- coding: UTF-8 -*-  import pika   import random            credentials = pika.PlainCredentials('root', '123456')   #这里可以连接远程IP,请记得打开远程端口     parameters = pika.ConnectionParameters('139.x.x.x',5672,'/',credentials

Appium环境的安装与配置,Python测试脚本测试

Appium自动化测试系列1 - Appium环境的安装与配置 发表于4个月前(2015-01-27 14:34)   阅读(803) | 评论(0) 0人收藏此文章, 我要收藏 赞0 寻找 会’偷懒’的开发者线下公开课,报名即享受免费体验云主机 摘要 看了网上很多有关Appium的安装配置贴,都写得语焉不详,不清不楚,正好打算把自动化测试框架从Robotium切换到Appium, 顺手记录一下,给大家参考.转载请注明出处. Appium 安装 配置 测试 之前一直使用Robotium做为And