python traceroute

Chandrakant Tiwari chandrakant.tiwari204 at gmail.com
Tue Jan 20 22:37:26 EST 2015


in the program below i want it to make it work the same way as TRACERT command . but i am not able to make it work the same way . for which i need your help thank you 
 here is the program
#!/usr/bin/python
import socket
import struct
import sys
# We want unbuffered stdout so we can provide live feedback for
# each TTL. You could also use the "-u" flag to Python.
class flushfile(file):
 def __init__(self, f):
 self.f = f
 def write(self, x):
 self.f.write(x)
 self.f.flush()
sys.stdout = flushfile(sys.stdout)
def main(dest_name):
 dest_addr = socket.gethostbyname(dest_name)
 port = 33434
 max_hops = 10
 icmp = socket.getprotobyname('icmp')
 udp = socket.getprotobyname('udp')
 ttl = 1
 while True:
 recv_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
 send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
 send_socket.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
 
 # Build the GNU timeval struct (seconds, microseconds)
 timeout = struct.pack("ll", 5, 0)
 
 # Set the receive timeout so we behave more like regular traceroute
 recv_socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeout)
 
 recv_socket.bind(("", port))
 sys.stdout.write(" %d " % ttl)
 send_socket.sendto("", (dest_name, port))
 curr_addr = None
 curr_name = None
 finished = False
 tries = 3
 while not finished and tries > 0:
 try:
 _, curr_addr = recv_socket.recvfrom(512)
 finished = True
 curr_addr = curr_addr[0]
 try:
 curr_name = socket.gethostbyaddr(curr_addr)[0]
 except socket.error:
 curr_name = curr_addr
 except socket.error as (errno, errmsg):
 tries = tries - 1
 sys.stdout.write("* ")
 
 send_socket.close()
 recv_socket.close()
 
 if not finished:
 pass
 
 if curr_addr is not None:
 curr_host = "%s (%s)" % (curr_name, curr_addr)
 else:
 curr_host = ""
 sys.stdout.write("%s\n" % (curr_host))
 ttl += 1
 if curr_addr == dest_addr or ttl > max_hops:
 break
if __name__ == "__main__":
 main('google.com')


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /