不管是windows仍是linux系統的traceroute命令都不能顯示歸屬地,在實際的網絡維護中,這些追蹤路由的歸屬地址也是很重要的信息,來幫助咱們定位問題發生的地方。如下爲python寫的一個腳原本顯示歸屬地。也方便本身的記憶和往後的使用。python
#!/usr/bin/python import sys import os import re import urllib2 import subprocess import platform def getlocation(ipaddr): url = "http://www.ip138.com/ips138.asp?ip=%s&action=2" % ipaddr u = urllib2.urlopen(url) s = u.read() #Get IP Address ip = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',s) #Get IP Address Location result = re.findall(r'(<li>.*?</li>)',s) location = result[0][16:-5].decode('gbk') return location if len(sys.argv) < 2: print "Usage: %s {hostname|ip}" % sys.argv[0] sys.exit() else: host = sys.argv[1] system_name = platform.dist()[0] if system_name == 'redhat': trace_cmd = '/bin/traceroute' elif system_name == 'Ubuntu': trace_cmd = '/usr/sbin/traceroute' try: p = subprocess.Popen([trace_cmd,host],stdout=subprocess.PIPE) while True: line = p.stdout.readline() if not line: break if re.match("^.[0-9].*(.*).*",line): try: ip = line.split('(')[1].split(')')[0] print line,getlocation(ip) except IndexError,e: print line, else: print line, except (KeyboardInterrupt,SystemExit): sys.exit()
因爲本身的網絡環境在系統判斷上沒有加入windows,後續能夠其餘朋友們添加了。另外我也寫了一個windows版本的。歡迎你們一塊兒交流
linux