Ich höre gerade Systeme 2 (Netzwerke) und da wir uns dort gerade mit TCP/IP, Routing, usw beschäfigen wollte ich mal sehen, wo meine Packete durch die Gegend ziehen. TraceRoute bietet unter Unix diese Möglichkeit, gibt aber nur die IPAdressen der benutzten Router aus. Per whois kann man dann für größere Server noch zusätzliche Informationen besorgen.
Ich habe also einfach normales traceRoute ausgeführt und für jede Adresse ein whois gestartet und die Rückgabe nach der Stadt geparst.
Jetzt kann man einfach eine beliebige IP eingeben und bekommt die Städte ausgegeben, durch die das Packet reist. (Solange die Server bei whois angemeldet sind). Gibt man eine www-Adresse ein, wird ein einzelner ping durchgeführt, dei ip geparst und dann das traceroute durchgeführt.
Bevor die Städte ausgegeben werden, wird gewartet bis das traceroute durch ist, wenn das stecken bleibt wird auch nichts ausgegeben, auch wenn schon ein paar Server durchlaufen wurden.
Das werde ich vielleicht noch ändern, damit man sehen kann, wo das Packet geblieben ist, aber bis jetzt habe ich subprocess noch nicht weit genug verstanden, um das so zu machen.
Ich habe gestern meine Uni gesucht (Freiburg) und habe gesehen, dass das Packet über Sulzbach (Taunus)(da sitzt Arcor), Frankfurt und Karlsruhe gelaufen ist. Luftlinie zum Rechenzentrum sind grob 3km

Viel Spaß
// mich würde besonders interessieren, ob das Programm auch unter Linux läuft, bei windows dürfte es nicht laufen.
Code: Alles auswählen
#!/usr/bin/python
from urllib2 import urlopen
import re
import string
import os, popen2, subprocess
from optparse import OptionParser
# Ermittlung der Stadt in dem der Router mit dieser IP steht
def getAdress(ip):
l = executeInTerminal(["whois",ip]);
# der erste String in der Adresse,
# der 5 Zahlen beinhaltet, wird zurueckgegegben.
for line in l[10:]: # erster Abschnitt beinhaltet Adresse von Ripe Network Coordination Center
m = re.match('address:.*\d{5}.*',line)
if m!=None:
x = m.string
x = string.replace(x,"address:","")
return string.lstrip(x)
return "AdressError"
# traceroute mit Ortsangabe der Router
def traceEnhanced(ip):
l = executeInTerminal(['traceroute',ip])
for s in l[:-1]:
start = s.find("(")
end = s.find(")")
ipAdress = s[start+1:end]
if s.rfind("localhost")>-1:
print s[:start]+" "+ipAdress
continue
print s[:start]+" "+ipAdress+" \t"+getAdress(ipAdress)
# die uebergebenen Befehle werden im Terminal ausgefuehrt,
# wenn sie fertig sind, wird die Ausgabe als Zeilen liste zurueckgegeben
def executeInTerminal(command):
process = subprocess.Popen(command, stdout=subprocess.PIPE)
process.wait()
lines = process.stdout.read()
return string.split(lines,"\n")
parser = OptionParser()
(options,args) = parser.parse_args()
# Adresse aus dem Paramezer
ip = args[0]
# falls eine www-Adresse angegeben wurde, wird ein einzelnes Packet
# hingeschickt, um die IP zu ermitteln
if args[0].rfind("www")>-1:
lines = executeInTerminal(['ping','-c 1',args[0]]);
s = lines[1]
start = s.find("from ")
end = s.find(":")
ip = s[start+5:end]
traceEnhanced(ip)