吴江做企业网站,安装和使用wordpress,百度站长,中国百货网文章目录 前言1. 命令行传参2. 代码 前言
最近在只有python2的服务器上部署服务#xff0c;不能用三方类库#xff0c;这里出于好奇心学习下python。这里简单做个脚本#xff0c;实现了检验网络连通性的功能#xff08;类似于curl#xff09;。
1. 命令行传参
使用命令… 文章目录 前言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 redef get_hostname(input_url):if len(input_url) 0:return url为空hostname urlparse.urlparse(input_url).hostnameif 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).portif input_port:return input_port# url 上读不到端口号用协议类型区分scheme urlparse.urlparse(input_url).schemeif scheme https or scheme wss:return 443if scheme http or ws:return 80def 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 则校验是否是解析出来的ipif input_ip:if actual_ip ! input_ip:print printTemplate % (input_url, input_ip, \\, 未能联通, 实际解析的ip为 actual_ip)continueport get_port(input_url)# 连通性测试result check_connect(actual_ip, port)print printTemplate % (input_url, actual_ip, port, result)