from subprocess import Popen, PIPE
import re
import pygeoip
def get_traceroute_res(hostname, max_hop=10):
p = Popen(['traceroute', '-m', str(max_hop), hostname], stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate()
rc = p.returncode
return output
def get_all_ip(result):
reip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])')
return [i for i in reip.findall(result) if i]
if __name__ == '__main__':
result = get_traceroute_res('comcast.com')
ip_list = get_all_ip(result)
gi = pygeoip.GeoIP("GeoLiteCity.dat")
for ip in ip_list:
ip_info = gi.record_by_addr(ip)
try:
print ip_info['country_name'], ip_info['latitude'], ip_info['longitude'], ip
except Exception, error:
pass
结果如下:
Japan 35.69 139.69 106.187.33.3
Japan 35.69 139.69 106.187.33.3
Japan 35.69 139.69 124.215.199.125
Japan 35.69 139.69 124.215.199.125
Japan 35.69 139.69 124.215.194.178
Japan 35.69 139.69 124.215.194.162
Japan 35.69 139.69 124.215.194.177
Japan 35.69 139.69 203.181.100.66
Japan 35.69 139.69 203.181.100.202
Japan 35.69 139.69 111.87.3.46
Japan 35.69 139.69 111.87.3.54
Japan 35.69 139.69 124.215.192.126
Japan 35.69 139.69 124.215.192.126
United States 38.0 -97.0 68.86.85.154
United States 38.0 -97.0 68.86.94.126
没有评论:
发表评论