import
class
BADDR = "0.0.0.0" # default bind address - (all
PORT = 33434 # default
ICMP = socket.
UDP = socket.
desternation =
ttl = 0 # we inrecement this by one each time.
#
reciever =
sender =
#
finished =
def __init__(self,
self.desternation = socket.
self.reciever = socket.socket(socket.AF_INET, socket.SOCK_RAW, self.
self.sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, self.
# bind to reciever so we can listen for
self.reciever.bind((self.BADDR, self.
def
""" Connects to next server 1 hop away from current server (i.e. server[ttl + 1])
if self.
# we have nothing to do, just
return
return
# first job increment the ttl on the
self.ttl +=
self.sender.setsockopt(socket.SOL_IP, socket.IP_TTL, self.
self.sender.sendto("", (self.desternation, self.
current_server = self.reciever.recvfrom(512)[1][0] # get 512 bytes from the
self.
if current_server == self.
self.finished =
def display(self,
""" Gets the hostname (if we can) and displays
try:
try:
name = socket.
print "%s) %s (%s)" % (self.ttl, name,
except socket.
# we couldn't - we'll just tell them the IP
print "%s) %s" % (self.ttl,
def
""" Be good and close our sockets
try:
try:
self.reciever.
except socket.
# already
pass
try:
pass
try:
self.sender.
except socket.
# already
pass
pass
if __name__ ==
# lets get the address from the commandline
if len(sys.argv) <=
# nothing been
print "You need to give an
print "%s <server>" % sys.
sys.exit() # we can't do
tracert = TraceRoute(sys.
while not tracert.
tracert.next_server()