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
本文出自 “新手PS欢迎交流” 博客,请务必保留此出处http://linpeisong.blog.51cto.com/9601554/1745661
原文地址:http://linpeisong.blog.51cto.com/9601554/1745661