【Python】Python 2 测试网络连通性脚本

news2024/10/7 10:20:00

文章目录

    • 前言
    • 1. 命令行传参
    • 2. 代码

前言

最近在只有python2的服务器上部署服务,不能用三方类库,这里出于好奇心学习下python。这里简单做个脚本,实现了检验网络连通性的功能(类似于curl)。
在这里插入图片描述

1. 命令行传参

使用命令行的目的是可以一次性检验多个url的连通性,比如上线前对接多个三方接口可以用上。

python test_socket.py -u "{'https://www.baidu.com':'120.232.145.144','ws://localhost:8080/ws':'127.0.0.1','wss://hello/ws':''}" 

参数解释

{
	'https://www.baidu.com':'120.232.145.144', // 期待域名解析为120.232.145.144 否则报错
	'ws://localhost:8080/ws':'127.0.0.1',  // 期待域名解析为127.0.0.1 否则报错
	'wss://hello/ws':''  // 无期望域名解析的ip,保证连通性即可
}

2. 代码

# -*- coding: utf-8 -*-

# coding:utf-8
import sys
import getopt
import socket
import urlparse
import re


def get_hostname(input_url):
    if len(input_url) == 0:
        return 'url为空'
    hostname = urlparse.urlparse(input_url).hostname
    if hostname is None:
        return '域名解析为空'
    try:
        return socket.gethostbyname(hostname)
    except socket.error:
        return '域名解析异常'


def get_port(input_url):
    if len(input_url) == 0:
        return 'url为空'
    # url 上读端口号
    input_port = urlparse.urlparse(input_url).port
    if input_port:
        return input_port
    # url 上读不到端口号用协议类型区分
    scheme = urlparse.urlparse(input_url).scheme
    if scheme == 'https' or scheme == 'wss':
        return 443
    if scheme == 'http' or 'ws':
        return 80


def check_connect(input_ip, input_port):
    # 设置超时时间为3秒钟
    socket.setdefaulttimeout(3)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((input_ip, input_port))
        return '可联通'
    except socket.timeout:
        return '无法联通, 超时'
    except Exception as e:
        return '无法联通, 异常:' + str(e)
    finally:
        s.close()


# 从命令行中读取参数
opts, argv = getopt.getopt(sys.argv[1:], 'u:')
ops = dict(opts)
url_ip_dict = eval(ops.get('-u'))

# 循环参数内容进行连通性检测
print "-"*150
printTemplate = "%-60s %-20s %-20s %-50s"
print printTemplate % ('url', 'ip', 'port', 'result')
print "-"*150
for input_url, input_ip in url_ip_dict.iteritems():
    # 域名解析
    actual_ip = get_hostname(input_url)
    # 未能解析出ip为异常
    if not re.match(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', input_ip):
        print printTemplate % (input_url, '\\', '\\', actual_ip)
        continue

    # 解析出ip, 且入参存在ip 则校验是否是解析出来的ip
    if input_ip:
        if actual_ip != input_ip:
            print printTemplate % (input_url, input_ip, '\\', '未能联通, 实际解析的ip为' + actual_ip)
            continue

    port = get_port(input_url)
    # 连通性测试
    result = check_connect(actual_ip, port)
    print printTemplate % (input_url, actual_ip, port, result)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode | 58.最后一个单词的长度

这道题要求最后一个单词的长度,第一个想到的就是反向遍历字符串,寻找最后一个单词并计算其长度。由于尾部可能会有’ ,所以我们从后往前遍历字符串,找到第一个非空格的字符,然后记录下到下一个空格前依次有多少个字母即…

芯片后端对于芯片设计公司的重要性

在芯片设计流程中,后端设计是一个至关重要的环节,它直接关系到芯片从设计到实际生产的转化,以及最终产品的性能、可靠性、成本和上市时间。 以下是为什么芯片后端非常重要的几个关键原因: 物理实现:后端设计是芯片从逻…

20240612前端问题总结

20240612前端问题总结 给定固定大小的父 子盒子&#xff0c;要实现子盒子上下左右居中 使用calc()计算&#xff0c;子绝父相和子元素调整位置&#xff0c;flex弹性盒布局&#xff0c;transform&#xff0c;table-cell&#xff0c;浮动六种方法展示子元素垂直水平居中。 <…

人工智能系统中毒是一个日益严重的威胁

咨询公司 Protiviti 最近与一家客户公司合作&#xff0c;该公司遭遇了一次不寻常的攻击&#xff1a;一名黑客试图操纵输入该公司人工智能系统的数据。 公司领导仍在调查此次攻击&#xff0c;公司怀疑黑客试图扭曲人工智能系统的输出。 此类攻击并非新鲜事&#xff0c;但在网络…

stable diffusion中的negative prompt是如何工作的

https://stable-diffusion-art.com/how-negative-prompt-work/https://stable-diffusion-art.com/how-negative-prompt-work/https://zhuanlan.zhihu.com/p/644879268

技术速递|Microsoft Build 2024 中的 .NET 公告和更新

作者&#xff1a;.NET 团队 排版&#xff1a;Alan Wang 在 Microsoft Build 2024 上&#xff0c;我们很高兴推出一系列旨在使 .NET 开发更快、更容易的新功能和工具。 探索 Microsoft Build 2024 上的 .NET 会议&#xff0c;了解新功能的实际效果&#xff0c;或者通过下载 .NE…

【六】Linux安装部署Nginx web服务器--及编写服务器启动脚本

一、部署安装nginx 1、查看nginx是否安装依赖包 [rootlocalhost ~]# rpm -q zlib-devel pcre-devel package zlib-devel is not installed package pcre-devel is not installed 2、若没有则安装nginx 依赖包 [rootlocalhost ~]# yum -y install zlib-devel* pcre-dev…

30、 shell脚本进阶

shell脚本ifcase 一、条件测试 1.1、条件测试&#xff1a;$?----返回码&#xff0c;判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常。 二、test命令 test命令&#xff1a;可以进行条件测试&#xff…

RAM IP核配置

REVIEW 之前已经学习过&#xff1a; ROM:FPGA寄存器 Vivado IP核-CSDN博客 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 1. 今日摸鱼计划 RAM创建与测试 小梅哥视频&#xff1a; 21C_嵌入式块存储器RAM介绍_哔哩哔哩_bilibili 21D_嵌入式块存储器RAM实现和仿真_哔哩…

C++ 实现HTTP的客户端、服务端demo和HTTP三方库介绍

本文使用C模拟实现http的客户端请求和http的服务端响应功能&#xff0c;并介绍几种封装HTTP协议的三方库。 1、实现简单HTTP的服务端功能 本程序使用C tcp服务端代码模拟HTTP的服务端&#xff0c;服务端返回给客户端的消息内容按照HTTP协议的消息响应格式进行了组装。 demo如…

腾讯云 BI 数据分析与可视化的快速入门指南

前言 腾讯云 BI 是一款商业智能解决方案&#xff0c;提供数据接入、分析、可视化、门户搭建和权限管理等全流程服务。它支持敏捷自助设计&#xff0c;简化报表制作&#xff0c;并通过企业微信等渠道实现协作。产品分为个人版、基础版、专业版和私有化版&#xff0c;满足不同规…

联想电脑 调节屏幕亮度不起使用,按F5,F6,屏幕上的hotkeys进度条是在改变,但是屏幕没有一些作用的处理方法

1、查看驱动是否正常 Win键X &#xff0c;设备管理器 发现似乎挺正常的。 查看原厂驱动&#xff1a;联想电脑管家 这样看来&#xff0c;驱动是没有问题了。 2、看看设置电池模式 其实还是这个电池模式的问题导致。 如果处于养护模式的话&#xff0c;充电只在75%~80%&#x…

探索Edge

目录 1.概述 1.1.什么是浏览器 1.2.浏览器的作用 2.Edge 2.1.什么是Edge 2.2.诞生背景 2.3.历史版本 2.4.作用 2.5.优缺点 2.5.1.优点 2.5.2.缺点 3.对比 3.1.和360浏览器的对比 3.2.和谷歌浏览器&#xff08;Chrome&#xff09;的对比 4.未来展望 5.总结 1.概…

浏览器f12控制台怎么获取vue实例,并且修改data数据

我们在日常的生产工作中&#xff0c;经常会遇到一些问题&#xff0c;比如&#xff0c;若产品已经部署&#xff0c;或是目前无法查看源代码&#xff0c;或者向用命令直接修改查询默认表单数据&#xff0c;那我们怎么去查看Vue实例呢&#xff1f; 我们在浏览器直接打印this不能得…

[Alogithm][动态规划][背包问题][组合总和IV][不同的二叉搜索树]详细讲解

目录 1.组合总和 Ⅳ1.题目链接2.算法原理详解3.代码实现 2.不同的二叉搜索树1.题目链接2.算法原理详解3.代码实现 1.组合总和 Ⅳ 1.题目链接 组合总和 Ⅳ 2.算法原理详解 本题是个排列题&#xff0c;而并非组合题&#xff0c;所以并非背包问题 思路&#xff1a; 确定状态表示…

【spring 】支持spring WebFlux 的容器

spring WebFlux 是 Spring 5 引入的响应式 Web 框架&#xff0c;它支持非阻塞、事件驱动的编程模型&#xff0c;特别适合处理高并发的场景。 Spring WebFlux 可以运行在多种容器上 包括下面&#xff1a; Netty: Netty 是一个异步事件驱动的网络应用程序框架&#xff0c;用于快…

OpenCV 的模板匹配

OpenCV中的模板匹配 模板匹配&#xff08;Template Matching&#xff09;是计算机视觉中的一种技术&#xff0c;用于在大图像中找到与小图像&#xff08;模板&#xff09;相匹配的部分。OpenCV提供了多种模板匹配的方法&#xff0c;主要包括基于相关性和基于平方差的匹配方法。…

【RPC项目-1】0612

写在前面&#xff0c;主要是作学习回顾笔记&#xff0c;以备后续面试 LogEvent 组成&#xff1a; 日志级别&#xff08;level&#xff09;日期时间(精确到ms)进程号pid&#xff0c;线程号threadid文件名file_name、行号line自定义msg 输出格式如&#xff1a;[level]\t[%y-%…

dvadmin 调试问题

链接&#xff1a;django-vue3-admin: django-vue3-admin 是一套全部开源的快速开发平台&#xff0c;毫无保留给个人免费使用、团体授权使用。 django-vue3-admin 基于RBAC模型的权限控制的一整套基础开发平台&#xff0c;权限粒度达到列级别&#xff0c;前后端分离&#xff0c;…

vb.net小demo(计算器、文件处理等/C#也可看)

Demo1&#xff1a;使用窗体控件实现一个简易版计算器 Public Class Form1Private Sub Button_1_Click(sender As Object, e As EventArgs) Handles Button_1.ClickCalSubBox.Text Button_1.TextEnd SubPrivate Sub Button_2_Click(sender As Object, e As EventArgs) Handles …