怎样一键检测域名或url是否正常解析并传输

好久没有写博客了,现在重新拾起来,我想还不算晚。

工作中,经常会有人抱怨:网站好卡,dns是不是有问题...... 有没有一键的方式了解到是dns解析的问题还是网络传输导致的吗?

有。可以写一些脚本检查。shell可以充分利用curl工具编写脚本,python可以充分利用pycurl模块编写脚本。

#!/usr/bin/env python
#coding: utf-8

'''
功能:检测域名解析及url响应时间
用法:可以将相关域名或url写死,也可以修改脚本变成交互式,每次可以检测多个
作者:任小为 e-mail: [email protected]
版本:v1.0
时间:2018.07.19
'''

import sys
import os
import time
import pycurl

##urls = "https://www.baidu.com"
urls = raw_input("Please input your urls: ")
if len(urls) == 0:
    print("You have no input any url...")
    sys.exit(1)

print("")

for url in urls.split():
    c = pycurl.Curl()
    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.CONNECTTIMEOUT, 5)
    c.setopt(pycurl.TIMEOUT, 5)
    c.setopt(pycurl.FORBID_REUSE, 1)
    c.setopt(pycurl.MAXREDIRS, 1)
    c.setopt(pycurl.NOPROGRESS, 1)
    c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)
    
    indexfile = open(os.path.dirname(os.path.realpath(__file__)) + "/content.txt", "wb")
    c.setopt(pycurl.WRITEHEADER, indexfile)
    c.setopt(pycurl.WRITEDATA, indexfile)
    
    try:
        c.perform()
    except Exception, e:
        print("connection error: " + str(e))
        indexfile.close()
        c.close()
        sys.exit()
    
    NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
    CONNECT_TIME = c.getinfo(c.CONNECT_TIME)
    PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME)
    STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME)
    TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
    HTTP_CODE = c.getinfo(c.HTTP_CODE)
    SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
    HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
    SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)
    
    print("-"*15 + url +"-"*15)
    print("HTTP状态码:%s" % (HTTP_CODE))
    print("DNS解析时间:%.2f ms" % (NAMELOOKUP_TIME * 1000))
    print("建立连接时间:%.2f ms " % (CONNECT_TIME * 1000))
    print("准备传输时间:%.2f ms " % (PRETRANSFER_TIME * 1000))
    print("传输开始时间:%.2f ms " % (STARTTRANSFER_TIME * 1000))
    print("传输结束时间:%.2f ms " % (TOTAL_TIME * 1000))
    print("下载数据包大小:%d bytes/s " % (SIZE_DOWNLOAD))
    print("HTTP头部大小:%d byte " % (HEADER_SIZE))
    print("平均下载速度:%d bytes/s " % (SPEED_DOWNLOAD))
    print("")

indexfile.close()
c.close()
sys.exit()

上面我用python写的一键检测脚本,可将脚本命名为: mypycurl.py,执行方式:python mypycurl.py,检测项可以写1个或者多个。执行结果如下:

通过执行结果可以看到域名的解析时间、网络传输时间、下载速度等,这些结果都是充分利用pycurl模块分析得到。可以多执行几次检测,也可以对脚本j加一个for循环,每次循环检测10次,如果dns解析时间较长(比如每次都是100多ms),则说明dns有问题,接下来对症下药即可。

关于脚本中的模块、方法或者python语法,如果有不懂的地方可以自行百度,也可以给我留言,只要我看到了一定答疑解惑、共同进步!

原文地址:http://blog.51cto.com/4593973/2147681

时间: 2024-10-14 01:14:10

怎样一键检测域名或url是否正常解析并传输的相关文章

如何检测域名有没有被微信拦截 微信拦截域名原理

经常遇到一些公司做活动因为一个 h5 页面被分享多次遭到微信拦截,导致所有的分享都白做了. 所以就有一个想法,能不能实时监测这个 h5 的 URL 一单发现被拦截 就立马更换 域名或 url 在网上看到好多接口 于是自己研究了一下,发现一个微信的官方检测借口!! http://qbview.url.cn/getResourceInfo?appid=31&url=http://www.wangzhesha.com 参数 appid= 31 默认的 url 需要检查的url 如果被检查的 URL 没

网站微信拦截查询工具 采用官方接口检测域名是否在微信中被拦截

大家在微信中浏览链接的时候一定会出现“已停止访问该网页”这种情况,这种情况表示推广的域名已经被微信浏览器拦截(屏蔽). 这是微信为营造和维护好的网络环境针对诱导分享,不健康内容等链接进行的限制.这对于专门做微信推广和微信营销的朋友们来说是个致命打击,每天花钱花人力物力去推广,哪知道还没到用户端就已经半路夭折.那么对于运营人来说,实时了解域名被封情况对自己是非常重要的!所以今天我就分享一下我自己正在使用的检测域名在微信当前状态的工具! 一.API接口检测 1.http://www.qqdwz.cn

如何一键去除域名非80端口,教你如何去除网址后面的端口号

如果有时候必须采用非80端口进行搭建网站,可以采用PHPWAMP内置功能"一键清除域名的非80端口" 案例采用我开发的纯绿色PHP集成环境PHPWAMP里面的"去端口"功能模块,版本号为8.1.8.8 案例演示: 点击常用工具,打开"去掉域名非80端口"功能即可 弹出的界面菜单如下图 如下填写,域名填写格式abc.com,具体如下图,带红星的必填,其他为选填 只需要填写abc.com,无论是abc.com域名或者是带www的www.abc.com

免费的freedns实现动态域名和url转发

路由器的固件是dd-wrt 到freedns.afraid.org上注册一个动态域名,如果默认的端口无法使用80,需要配置二级域名的url转发功能. 实测2个月很稳定. 另外为了防止主机ip地址更新频繁,可以在后台执行一个cron的定时命令ping 保持网络连接,尽量降低ip被替换掉的可能性.实际效果还是很好地,留意了一下,连续开机十天以上,没有发生ip变更.

小功能大用处 ---- 一键检测各服务器是否存活

工作中会遇到判断服务器是否存活的场景,比如:批量重启服务器后,各宿主机或虚拟机是否启动成功. 检测服务器是否存活的原理很简单:先检查服务器是否通(ping):如果不通则检查服务器上的服务是否通,如果服务也不通,则说明这台服务器没有开启.可以使用的工具有:ping.telnet.nmap或者tcping等. nmap功能强大,用处广泛:tcping可以在服务器禁ping的情况下检查机器是否存活(比如windows机器默认就是禁ping的).在这里,我用的是ping和telnet组合. 关于ping

shell之检测域名到期时间并进行邮件通知

在工作中,常常会有几十上百的域名,不可能一一去查看,一不小心到期没续费就会造成很大的麻烦,以此为前提写一个检测域名到期时间的脚本,当到期时间小于等于7天时,进行邮件通知:check_domain.sh #!/bin/bash source /etc/profile #定义邮件发送列表 maillist=( [email protected] [email protected] ) #发送邮件函数 send_mail(){ SUBJECT="$1域名即将到期" if [ $2 -ge 0

微信检测域名防封系统 如何调用微信官方的微信域名检测接口API

经常遇到一些公司做活动因为一个 h5 页面被分享多次遭到微信拦截,导致所有的分享都白做了. 所以就有一个想法,能不能实时监测这个 h5 的 URL 一单发现被拦截 就立马更换 域名或 url http://qbview.url.cn/getResourceInfo?appid=31&url=http://www.wangzhesha.com 参数 appid= 31 默认的 url 需要检查的url 如果被检查的 URL 没有被拦截,则会直接跳转到目标 url 上,如果被拦截了,则给出拦截提示,

Django中url的逆向解析 -> Reverse resolution of URLs

之前的一篇文章中介绍了url的基本用法[Django的url用法] 解析的过程可以概括为URL request -> view calling 同时,django又提供了另一种解析方式 - Reverse resolution of URLs 它的解析过程为 view calling -> URL request 因为Django奉行的是DRY原则,所以使用这种方式,就无需对url地址进行硬编码.在原本需要硬编码url的地方,直接可以使用url的名字,然后逆向解析出url地址. Django提

JavaScript实现http地址自动检测并添加URL链接

一.天生我材必有用 给http字符自动添加URL链接是比较常见的一项功能.举两个我最近常用到的自动检测http://地址并添加链接的例子吧,首先是QQ邮箱,在使用QQ邮箱时,如果输入了URL地址(http://或是https://开头),则QQ邮箱会自动给这个地址添加可打开的链接.如下图所示: 还有就是微博客产品,例如twitter(zxx://翻墙可以follow苍井空姐姐哦~~ ^_^),或是国产的新浪微博.当您的微博信息中有类似于http://www.zhangxinxu.com/的URL