Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # Name: Traceroute
- # Info: A simple traceroute program written in Python 3
- # Author: Daniel Cripps
- # Version: 0.1.1
- # Date Last Updated: 14/3/15
- import socket
- import argparse
- import sys
- def trace(dest, port, maxHops, verbose):
- destAddr = socket.gethostbyname(dest)
- icmp = socket.getprotobyname('icmp')
- udp = socket.getprotobyname('udp')
- ttl = 1
- while True:
- recvSckt = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
- sendSckt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
- sendSckt.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
- recvSckt.bind(("", port))
- sendSckt.sendto(bytes("","utf-8"), (dest, port))
- currAddr = None
- currName = None
- try:
- _, currAddr = recvSckt.recvfrom(512)
- currAddr = currAddr[0]
- try:
- currName = socket.gethostbyaddr(currAddr)[0]
- except socket.error:
- currName = currAddr
- except socket.error:
- pass
- finally:
- sendSckt.close()
- recvSckt.close()
- if currAddr is not None:
- currHost = ('%s (%s)' % (currName, currAddr))
- else:
- currHost = "*"
- print ('%d\t%s' % (ttl, currHost))
- ttl += 1
- if currAddr == destAddr or ttl == maxHops:
- sys.exit()
- def main():
- parser = argparse.ArgumentParser(description='Simple Traceroute.')
- parser.add_argument('--verbose', '-v',action='store_true',help='verbose flag')
- parser.add_argument('--port','-p',default=33434,type=int,help='The port number')
- parser.add_argument('--hops','-t',default=30,type=int,help='The number of hops')
- parser.add_argument('dest')
- args = parser.parse_args()
- if args.verbose:
- print('Starting scan using parameters')
- print('Port : ',args.port)
- print('Hops : ',args.hops)
- print('Dest : ',args.dest)
- trace(args.dest, args.port, args.hops, args.verbose)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement