1. 程式人生 > >怎樣一鍵檢測域名或url是否正常解析並傳輸

怎樣一鍵檢測域名或url是否正常解析並傳輸

img 看到了 err 地方 eal usr 圖片 交互式 成交

好久沒有寫博客了,現在重新拾起來,我想還不算晚。

工作中,經常會有人抱怨:網站好卡,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語法,如果有不懂的地方可以自行百度,也可以給我留言,只要我看到了一定答疑解惑、共同進步!


怎樣一鍵檢測域名或url是否正常解析並傳輸