python 的traceroute功能能利用scapy模板很方便實現,並且可以輸出路由圖片非常直觀。
這裏了修改了《python自動化運維:技術與最佳實踐》的代碼進行說明。
#!/usr/bin/evn python #-*-coding:utf-8 -*- import time import logging,warnings import subprocess import socket # eclipse的pydev提示unresolve,但運行正常 from scapy.all import traceroute # @UnresolvedImport warnings.filterwarnings("ignore",category=DeprecationWarning) logging.getLogger("scapy.runtime").setLevel(logging.ERROR) domains = raw_input('Please input domains or IPs: ') # 利用socket 解析域名的方法 # try: # ip = socket.gethostbyname(domains) # except socket.error,e: # print "you should run by root"''' try: domain = domains.split(' ') res,unans = traceroute(domains,dport=[80,443],retry=-2) res.graph(target=">test.svg") time.sleep(1) #輸出轉換爲png爲可選,chrome,ie等可以打開.svg文件 subprocess.Popen("/usr/bin/convert test.svg test.png",shell=True) except: print "you shoud run by root or domain error"
注意:traceroute程序都需要root來運行。traceroute函數可以傳入以列表格式的多個域名/IP,和多個端口(這裏有80和443)
這裏我給出在學校traceroute百度和谷歌的輸出結果:
左邊爲百度,右邊爲谷歌。經過了移動的CDN解析,谷歌最後經過了電信的CDN