sources.json
This commit is contained in:
parent
d62f1c148e
commit
38e96acc58
4 changed files with 143 additions and 107 deletions
20
LICENSE
Normal file
20
LICENSE
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Copyright (c) 2013 Addy Yeow Chin Heng <ayeowch@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
133
README.md
133
README.md
|
|
@ -12,10 +12,10 @@ Save traceroute.py into a directory with its path stored in your PYTHONPATH envi
|
|||
Try the following from your Python interpreter:
|
||||
|
||||
>>> from traceroute import Traceroute
|
||||
>>> traceroute = Traceroute(ip_address='8.8.8.8')
|
||||
>>> traceroute = Traceroute("8.8.8.8")
|
||||
>>> hops = traceroute.traceroute()
|
||||
>>> hops
|
||||
[{'hostname': 'gigagate1', 'longitude': -74.6597, 'rtt': '0.700 ms', 'hop_num': 1, 'latitude': 40.3756, 'ip_address': '128.112.128.114'}, {'hostname': 'vgate1', 'longitude': -74.6597, 'rtt': '0.375 ms', 'hop_num': 2, 'latitude': 40.3756, 'ip_address': '128.112.12.22'}, {'hostname': 'te-1-4-3998-pe01.philadelphia.pa.ibone.comcast.net', 'longitude': -75.3697, 'rtt': '18.296 ms', 'hop_num': 3, 'latitude': 40.3265, 'ip_address': '24.104.128.89'}, {'hostname': 'te-0-1-0-12-cr01.ashburn.va.ibone.comcast.net', 'longitude': -97.0, 'rtt': '28.446 ms', 'hop_num': 4, 'latitude': 38.0, 'ip_address': '68.86.84.177'}, {'hostname': 'pos-0-2-0-0-pe01.ashburn.va.ibone.comcast.net', 'longitude': -97.0, 'rtt': '21.968 ms', 'hop_num': 5, 'latitude': 38.0, 'ip_address': '68.86.86.70'}, {'hostname': '75.149.231.62', 'longitude': -97.0, 'rtt': '20.685 ms', 'hop_num': 6, 'latitude': 38.0, 'ip_address': '75.149.231.62'}, {'hostname': '209.85.252.80', 'longitude': -122.0574, 'rtt': '18.383 ms', 'hop_num': 7, 'latitude': 37.4192, 'ip_address': '209.85.252.80'}, {'hostname': '209.85.252.46', 'longitude': -122.0574, 'rtt': '18.541 ms', 'hop_num': 7, 'latitude': 37.4192, 'ip_address': '209.85.252.46'}, {'hostname': '209.85.252.80', 'longitude': -122.0574, 'rtt': '19.723 ms', 'hop_num': 7, 'latitude': 37.4192, 'ip_address': '209.85.252.80'}, {'hostname': '72.14.238.82', 'longitude': -122.0574, 'rtt': '15.124 ms', 'hop_num': 9, 'latitude': 37.4192, 'ip_address': '72.14.238.82'}, {'hostname': '72.14.238.16', 'longitude': -122.0574, 'rtt': '15.564 ms', 'hop_num': 9, 'latitude': 37.4192, 'ip_address': '72.14.238.16'}, {'hostname': '216.239.49.149', 'longitude': -122.0574, 'rtt': '23.253 ms', 'hop_num': 10, 'latitude': 37.4192, 'ip_address': '216.239.49.149'}, {'hostname': 'google-public-dns-a.google.com', 'longitude': -122.0574, 'rtt': '13.020 ms', 'hop_num': 11, 'latitude': 37.4192, 'ip_address': '8.8.8.8'}]
|
||||
[{'hostname': 'gigagate1', 'longitude': -74.6597, 'rtt': '0.913 ms', 'hop_num': 1, 'latitude': 40.3756, 'ip_address': '128.112.128.114'}, {'hostname': 'vgate1', 'longitude': -74.6597, 'rtt': '0.498 ms', 'hop_num': 2, 'latitude': 40.3756, 'ip_address': '128.112.12.22'}, {'hostname': '38.122.150.1', 'longitude': -74.006, 'rtt': '4.087 ms', 'hop_num': 3, 'latitude': 40.7143, 'ip_address': '38.122.150.1'}, {'hostname': 'te4-3.ccr01.phl01.atlas.cogentco.com', 'longitude': -97.0, 'rtt': '3.469 ms', 'hop_num': 4, 'latitude': 38.0, 'ip_address': '66.28.4.233'}, {'hostname': 'te7-3.ccr01.phl01.atlas.cogentco.com', 'longitude': -97.0, 'rtt': '3.586 ms', 'hop_num': 4, 'latitude': 38.0, 'ip_address': '154.54.0.189'}, {'hostname': 'te4-1.ccr01.bwi01.atlas.cogentco.com', 'longitude': -97.0, 'rtt': '6.470 ms', 'hop_num': 5, 'latitude': 38.0, 'ip_address': '154.54.2.173'}, {'hostname': 'te7-2.ccr01.bwi01.atlas.cogentco.com', 'longitude': -97.0, 'rtt': '6.821 ms', 'hop_num': 5, 'latitude': 38.0, 'ip_address': '154.54.83.222'}, {'hostname': 'te4-1.ccr01.bwi01.atlas.cogentco.com', 'longitude': -97.0, 'rtt': '20.586 ms', 'hop_num': 5, 'latitude': 38.0, 'ip_address': '154.54.2.173'}, {'hostname': '38.122.63.14', 'longitude': -83.1763, 'rtt': '34.924 ms', 'hop_num': 8, 'latitude': 42.3223, 'ip_address': '38.122.63.14'}, {'hostname': '38.122.62.74', 'longitude': -95.3877, 'rtt': '8.072 ms', 'hop_num': 8, 'latitude': 29.6144, 'ip_address': '38.122.62.74'}, {'hostname': '38.122.63.14', 'longitude': -83.1763, 'rtt': '8.950 ms', 'hop_num': 8, 'latitude': 42.3223, 'ip_address': '38.122.63.14'}, {'hostname': '209.85.252.80', 'longitude': -122.0574, 'rtt': '20.619 ms', 'hop_num': 9, 'latitude': 37.4192, 'ip_address': '209.85.252.80'}, {'hostname': '209.85.252.46', 'longitude': -122.0574, 'rtt': '13.415 ms', 'hop_num': 9, 'latitude': 37.4192, 'ip_address': '209.85.252.46'}, {'hostname': '72.14.234.65', 'longitude': -74.006, 'rtt': '15.676 ms', 'hop_num': 12, 'latitude': 40.7143, 'ip_address': '72.14.234.65'}, {'hostname': '72.14.234.53', 'longitude': -122.0574, 'rtt': '16.844 ms', 'hop_num': 12, 'latitude': 37.4192, 'ip_address': '72.14.234.53'}, {'hostname': 'google-public-dns-a.google.com', 'longitude': -97.0, 'rtt': '16.960 ms', 'hop_num': 14, 'latitude': 38.0, 'ip_address': '8.8.8.8'}]
|
||||
>>>
|
||||
|
||||
You can also run the script directly by passing in the --ip_address option:
|
||||
|
|
@ -24,10 +24,11 @@ You can also run the script directly by passing in the --ip_address option:
|
|||
Usage: traceroute.py --ip_address=IP_ADDRESS
|
||||
|
||||
Options:
|
||||
--version show program's version number and exit
|
||||
-h, --help show this help message and exit
|
||||
-i IP_ADDRESS, --ip_address=IP_ADDRESS
|
||||
IP address of destination host (default: 8.8.8.8)
|
||||
-j JSON_FILE, --json_file=JSON_FILE
|
||||
List of sources in JSON file (default: sources.json)
|
||||
-c COUNTRY, --country=COUNTRY
|
||||
Traceroute will be initiated from this country; choose
|
||||
'LO' for localhost to run traceroute locally, 'BY' for
|
||||
|
|
@ -47,7 +48,7 @@ You can also run the script directly by passing in the --ip_address option:
|
|||
{
|
||||
"hostname": "gigagate1",
|
||||
"longitude": -74.6597,
|
||||
"rtt": "0.700 ms",
|
||||
"rtt": "0.913 ms",
|
||||
"hop_num": 1,
|
||||
"latitude": 40.3756,
|
||||
"ip_address": "128.112.128.114"
|
||||
|
|
@ -55,97 +56,121 @@ You can also run the script directly by passing in the --ip_address option:
|
|||
{
|
||||
"hostname": "vgate1",
|
||||
"longitude": -74.6597,
|
||||
"rtt": "0.375 ms",
|
||||
"rtt": "0.498 ms",
|
||||
"hop_num": 2,
|
||||
"latitude": 40.3756,
|
||||
"ip_address": "128.112.12.22"
|
||||
},
|
||||
{
|
||||
"hostname": "te-1-4-3998-pe01.philadelphia.pa.ibone.comcast.net",
|
||||
"longitude": -75.3697,
|
||||
"rtt": "18.296 ms",
|
||||
"hostname": "38.122.150.1",
|
||||
"longitude": -74.006,
|
||||
"rtt": "4.087 ms",
|
||||
"hop_num": 3,
|
||||
"latitude": 40.3265,
|
||||
"ip_address": "24.104.128.89"
|
||||
"latitude": 40.7143,
|
||||
"ip_address": "38.122.150.1"
|
||||
},
|
||||
{
|
||||
"hostname": "te-0-1-0-12-cr01.ashburn.va.ibone.comcast.net",
|
||||
"hostname": "te4-3.ccr01.phl01.atlas.cogentco.com",
|
||||
"longitude": -97.0,
|
||||
"rtt": "28.446 ms",
|
||||
"rtt": "3.469 ms",
|
||||
"hop_num": 4,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "68.86.84.177"
|
||||
"ip_address": "66.28.4.233"
|
||||
},
|
||||
{
|
||||
"hostname": "pos-0-2-0-0-pe01.ashburn.va.ibone.comcast.net",
|
||||
"hostname": "te7-3.ccr01.phl01.atlas.cogentco.com",
|
||||
"longitude": -97.0,
|
||||
"rtt": "21.968 ms",
|
||||
"rtt": "3.586 ms",
|
||||
"hop_num": 4,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "154.54.0.189"
|
||||
},
|
||||
{
|
||||
"hostname": "te4-1.ccr01.bwi01.atlas.cogentco.com",
|
||||
"longitude": -97.0,
|
||||
"rtt": "6.470 ms",
|
||||
"hop_num": 5,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "68.86.86.70"
|
||||
"ip_address": "154.54.2.173"
|
||||
},
|
||||
{
|
||||
"hostname": "75.149.231.62",
|
||||
"hostname": "te7-2.ccr01.bwi01.atlas.cogentco.com",
|
||||
"longitude": -97.0,
|
||||
"rtt": "20.685 ms",
|
||||
"hop_num": 6,
|
||||
"rtt": "6.821 ms",
|
||||
"hop_num": 5,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "75.149.231.62"
|
||||
"ip_address": "154.54.83.222"
|
||||
},
|
||||
{
|
||||
"hostname": "te4-1.ccr01.bwi01.atlas.cogentco.com",
|
||||
"longitude": -97.0,
|
||||
"rtt": "20.586 ms",
|
||||
"hop_num": 5,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "154.54.2.173"
|
||||
},
|
||||
{
|
||||
"hostname": "38.122.63.14",
|
||||
"longitude": -83.1763,
|
||||
"rtt": "34.924 ms",
|
||||
"hop_num": 8,
|
||||
"latitude": 42.3223,
|
||||
"ip_address": "38.122.63.14"
|
||||
},
|
||||
{
|
||||
"hostname": "38.122.62.74",
|
||||
"longitude": -95.3877,
|
||||
"rtt": "8.072 ms",
|
||||
"hop_num": 8,
|
||||
"latitude": 29.6144,
|
||||
"ip_address": "38.122.62.74"
|
||||
},
|
||||
{
|
||||
"hostname": "38.122.63.14",
|
||||
"longitude": -83.1763,
|
||||
"rtt": "8.950 ms",
|
||||
"hop_num": 8,
|
||||
"latitude": 42.3223,
|
||||
"ip_address": "38.122.63.14"
|
||||
},
|
||||
{
|
||||
"hostname": "209.85.252.80",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "18.383 ms",
|
||||
"hop_num": 7,
|
||||
"rtt": "20.619 ms",
|
||||
"hop_num": 9,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "209.85.252.80"
|
||||
},
|
||||
{
|
||||
"hostname": "209.85.252.46",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "18.541 ms",
|
||||
"hop_num": 7,
|
||||
"rtt": "13.415 ms",
|
||||
"hop_num": 9,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "209.85.252.46"
|
||||
},
|
||||
{
|
||||
"hostname": "209.85.252.80",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "19.723 ms",
|
||||
"hop_num": 7,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "209.85.252.80"
|
||||
"hostname": "72.14.234.65",
|
||||
"longitude": -74.006,
|
||||
"rtt": "15.676 ms",
|
||||
"hop_num": 12,
|
||||
"latitude": 40.7143,
|
||||
"ip_address": "72.14.234.65"
|
||||
},
|
||||
{
|
||||
"hostname": "72.14.238.82",
|
||||
"hostname": "72.14.234.53",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "15.124 ms",
|
||||
"hop_num": 9,
|
||||
"rtt": "16.844 ms",
|
||||
"hop_num": 12,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "72.14.238.82"
|
||||
},
|
||||
{
|
||||
"hostname": "72.14.238.16",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "15.564 ms",
|
||||
"hop_num": 9,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "72.14.238.16"
|
||||
},
|
||||
{
|
||||
"hostname": "216.239.49.149",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "23.253 ms",
|
||||
"hop_num": 10,
|
||||
"latitude": 37.4192,
|
||||
"ip_address": "216.239.49.149"
|
||||
"ip_address": "72.14.234.53"
|
||||
},
|
||||
{
|
||||
"hostname": "google-public-dns-a.google.com",
|
||||
"longitude": -122.0574,
|
||||
"rtt": "13.020 ms",
|
||||
"hop_num": 11,
|
||||
"latitude": 37.4192,
|
||||
"longitude": -97.0,
|
||||
"rtt": "16.960 ms",
|
||||
"hop_num": 14,
|
||||
"latitude": 38.0,
|
||||
"ip_address": "8.8.8.8"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
26
sources.json
Normal file
26
sources.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"LO": {
|
||||
"url": "traceroute _IP_ADDRESS_"
|
||||
},
|
||||
"BY": {
|
||||
"url": "http://by104.activeby.net/lg/",
|
||||
"post_data": {"method": "trace", "host": "_IP_ADDRESS_"}
|
||||
},
|
||||
"CH": {
|
||||
"url": "http://www.switch.ch/cgi-bin/network/nph-traceroute-opencms?destination=_IP_ADDRESS_"
|
||||
},
|
||||
"JP": {
|
||||
"url": "http://www.harenet.ad.jp/cgi-bin/harenet/traceroute/traceroute.cgi",
|
||||
"post_data": {"host": "_IP_ADDRESS_"}
|
||||
},
|
||||
"RU": {
|
||||
"url": "http://traceroute.rusnet.ru/?_IP_ADDRESS_"
|
||||
},
|
||||
"UK": {
|
||||
"url": "http://ab.newnet.co.uk/cgi-bin/traceroute?_IP_ADDRESS_"
|
||||
},
|
||||
"US": {
|
||||
"url": "http://www.net.princeton.edu/cgi-bin/traceroute.pl",
|
||||
"post_data": {"target": "_IP_ADDRESS_"}
|
||||
}
|
||||
}
|
||||
|
|
@ -46,55 +46,17 @@ class Traceroute(object):
|
|||
"""
|
||||
Multi-source traceroute instance.
|
||||
"""
|
||||
def __init__(self, ip_address="8.8.8.8", country="US", tmp_dir="/tmp",
|
||||
no_geo=False, timeout=120, debug=False):
|
||||
def __init__(self, ip_address, source="sources.json", country="US",
|
||||
tmp_dir="/tmp", no_geo=False, timeout=120, debug=False):
|
||||
super(Traceroute, self).__init__()
|
||||
self.ip_address = ip_address
|
||||
self.source = source
|
||||
self.country = country
|
||||
self.tmp_dir = tmp_dir
|
||||
self.no_geo = no_geo
|
||||
self.timeout = timeout
|
||||
self.debug = debug
|
||||
|
||||
# Traceroute servers from traceroute.org
|
||||
sources = {
|
||||
'LO': {
|
||||
'url': "traceroute {}".format(ip_address),
|
||||
},
|
||||
'BY': {
|
||||
'url': "http://by104.activeby.net/lg/",
|
||||
'post_data': {
|
||||
'method': "trace",
|
||||
'host': ip_address,
|
||||
},
|
||||
},
|
||||
'CH': {
|
||||
'url': ("http://www.switch.ch/cgi-bin/network/nph-traceroute"
|
||||
"-opencms?destination={}".format(ip_address)),
|
||||
},
|
||||
'JP': {
|
||||
'url': ("http://www.harenet.ad.jp/cgi-bin/harenet/traceroute/"
|
||||
"traceroute.cgi"),
|
||||
'post_data': {
|
||||
'host': ip_address,
|
||||
},
|
||||
},
|
||||
'RU': {
|
||||
'url': "http://traceroute.rusnet.ru/?{}".format(ip_address)
|
||||
},
|
||||
'UK': {
|
||||
'url': ("http://ab.newnet.co.uk/cgi-bin/traceroute?{}".format(
|
||||
ip_address)),
|
||||
},
|
||||
'US': {
|
||||
'url': "http://www.net.princeton.edu/cgi-bin/traceroute.pl",
|
||||
'post_data': {
|
||||
'target': ip_address,
|
||||
},
|
||||
},
|
||||
}
|
||||
self.source = sources[self.country]
|
||||
self.locations = {} # Geo-coded locations
|
||||
self.locations = {}
|
||||
|
||||
def traceroute(self):
|
||||
"""
|
||||
|
|
@ -318,6 +280,9 @@ def main():
|
|||
cmdparser.add_option(
|
||||
"-i", "--ip_address", type="string", default="8.8.8.8",
|
||||
help="IP address of destination host (default: 8.8.8.8)")
|
||||
cmdparser.add_option(
|
||||
"-j", "--json_file", type="string", default="sources.json",
|
||||
help="List of sources in JSON file (default: sources.json)")
|
||||
cmdparser.add_option(
|
||||
"-c", "--country", type="choice", default="US",
|
||||
choices=["LO", "BY", "CH", "JP", "RU", "UK", "US"],
|
||||
|
|
@ -339,17 +304,17 @@ def main():
|
|||
"-d", "--debug", action="store_true", default=False,
|
||||
help="Show debug output (default: False)")
|
||||
options, _ = cmdparser.parse_args()
|
||||
if options.ip_address:
|
||||
traceroute = Traceroute(ip_address=options.ip_address,
|
||||
country=options.country,
|
||||
tmp_dir=options.tmp_dir,
|
||||
no_geo=options.no_geo,
|
||||
timeout=options.timeout,
|
||||
debug=options.debug)
|
||||
hops = traceroute.traceroute()
|
||||
print(json.dumps(hops, indent=4))
|
||||
else:
|
||||
cmdparser.print_usage()
|
||||
json_file = open(options.json_file, "r").read()
|
||||
sources = json.loads(json_file.replace("_IP_ADDRESS_", options.ip_address))
|
||||
traceroute = Traceroute(ip_address=options.ip_address,
|
||||
source=sources[options.country],
|
||||
country=options.country,
|
||||
tmp_dir=options.tmp_dir,
|
||||
no_geo=options.no_geo,
|
||||
timeout=options.timeout,
|
||||
debug=options.debug)
|
||||
hops = traceroute.traceroute()
|
||||
print(json.dumps(hops, indent=4))
|
||||
return 0
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue