Advertisement
Guest User

tracert

a guest
Mar 2nd, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. import socket
  2.  
  3.  
  4. def main(dest_name):
  5.     dest_addr = socket.gethostbyname(dest_name)
  6.     port = 33434
  7.     max_hops = 30
  8.     icmp = socket.getprotobyname('icmp')
  9.     udp = socket.getprotobyname('udp')
  10.     ttl = 1
  11.     while True:
  12.         recv_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
  13.         send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
  14.         send_socket.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
  15.         recv_socket.bind(("", port))
  16.         send_socket.sendto("".encode(), (dest_name, port))
  17.         curr_addr = None
  18.         curr_name = None
  19.         try:
  20.             _, curr_addr = recv_socket.recvfrom(1)
  21.             curr_addr = curr_addr[0]
  22.             try:
  23.                 curr_name = socket.gethostbyaddr(curr_addr)[0]
  24.             except socket.error:
  25.                 curr_name = curr_addr
  26.         except socket.error:
  27.             pass
  28.         finally:
  29.             send_socket.close()
  30.             recv_socket.close()
  31.  
  32.         if curr_addr is not None:
  33.             curr_host = "%s (%s)" % (curr_name, curr_addr)
  34.         else:
  35.             curr_host = "*"
  36.         print("%d\t%s" % (ttl, curr_host))
  37.  
  38.         ttl += 1
  39.         if curr_addr == dest_addr or ttl > max_hops:
  40.             break
  41.  
  42.  
  43. if __name__ == "__main__":
  44.     main('google.com')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement