Advertisement
Guest User

Untitled

a guest
Mar 17th, 2015
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.84 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # Name:                     Traceroute
  4. # Info:                         A simple traceroute program written in Python 3
  5. # Author:                   Daniel Cripps
  6. # Version:              0.1.1
  7. # Date Last Updated:    14/3/15
  8.  
  9. import socket
  10. import argparse
  11. import sys
  12.  
  13. def trace(dest, port, maxHops, verbose):
  14.     destAddr = socket.gethostbyname(dest)
  15.     icmp = socket.getprotobyname('icmp')
  16.     udp = socket.getprotobyname('udp')
  17.     ttl = 1
  18.     while True:
  19.         recvSckt = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
  20.         sendSckt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
  21.         sendSckt.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
  22.         recvSckt.bind(("", port))
  23.         sendSckt.sendto(bytes("","utf-8"), (dest, port))
  24.         currAddr = None
  25.         currName = None
  26.         try:
  27.             _, currAddr = recvSckt.recvfrom(512)
  28.             currAddr = currAddr[0]
  29.             try:
  30.                 currName = socket.gethostbyaddr(currAddr)[0]
  31.             except socket.error:
  32.                 currName = currAddr
  33.         except socket.error:
  34.             pass
  35.            
  36.         finally:
  37.             sendSckt.close()
  38.             recvSckt.close()
  39.        
  40.         if currAddr is not None:
  41.             currHost = ('%s (%s)' % (currName, currAddr))
  42.         else:
  43.             currHost = "*"
  44.         print ('%d\t%s' % (ttl, currHost))
  45.        
  46.         ttl +=  1
  47.        
  48.         if currAddr == destAddr or ttl == maxHops:
  49.             sys.exit()
  50.  
  51. def main():
  52.     parser = argparse.ArgumentParser(description='Simple Traceroute.')
  53.     parser.add_argument('--verbose', '-v',action='store_true',help='verbose flag')
  54.     parser.add_argument('--port','-p',default=33434,type=int,help='The port number')
  55.     parser.add_argument('--hops','-t',default=30,type=int,help='The number of hops')
  56.     parser.add_argument('dest')
  57.  
  58.     args = parser.parse_args()
  59.  
  60.     if args.verbose:
  61.         print('Starting scan using parameters')
  62.         print('Port : ',args.port)
  63.         print('Hops : ',args.hops)
  64.         print('Dest : ',args.dest)
  65.    
  66.     trace(args.dest, args.port, args.hops, args.verbose)
  67.  
  68. if __name__ == '__main__':
  69.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement