vmware:traceroute
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
vmware:traceroute [2012/11/08 18:21] – created nickaccad | vmware:traceroute [2012/11/12 03:51] (current) – naccad | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== How to traceroute inside ESXi ====== | ||
+ | |||
I found this somewhere on the internet a long time ago. | I found this somewhere on the internet a long time ago. | ||
ESX does not have a traceroute binary or utility, so someone created on in Python. | ESX does not have a traceroute binary or utility, so someone created on in Python. | ||
- | |||
- | {{: | ||
If you are the owner of this script, please let me know, I would like to see the latest version if any and give you some credit here. | If you are the owner of this script, please let me know, I would like to see the latest version if any and give you some credit here. | ||
-nick | -nick | ||
+ | |||
+ | <file python traceroute.py> | ||
+ | |||
+ | # | ||
+ | |||
+ | import optparse | ||
+ | import socket | ||
+ | import sys | ||
+ | |||
+ | icmp = socket.getprotobyname(' | ||
+ | udp = socket.getprotobyname(' | ||
+ | |||
+ | def create_sockets(ttl): | ||
+ | """ | ||
+ | Sets up sockets necessary for the traceroute. | ||
+ | socket and a sending socket. | ||
+ | """ | ||
+ | recv_socket = socket.socket(socket.AF_INET, | ||
+ | send_socket = socket.socket(socket.AF_INET, | ||
+ | send_socket.setsockopt(socket.SOL_IP, | ||
+ | return recv_socket, | ||
+ | |||
+ | def main(dest_name, | ||
+ | dest_addr = socket.gethostbyname(dest_name) | ||
+ | ttl = 1 | ||
+ | while True: | ||
+ | recv_socket, | ||
+ | recv_socket.bind(("", | ||
+ | send_socket.sendto("", | ||
+ | curr_addr = None | ||
+ | curr_name = None | ||
+ | try: | ||
+ | # socket.recvfrom() gives back (data, address), but we | ||
+ | # only care about the latter. | ||
+ | _, curr_addr = recv_socket.recvfrom(512) | ||
+ | curr_addr = curr_addr[0] | ||
+ | try: | ||
+ | curr_name = socket.gethostbyaddr(curr_addr)[0] | ||
+ | except socket.error: | ||
+ | curr_name = curr_addr | ||
+ | except socket.error: | ||
+ | pass | ||
+ | finally: | ||
+ | send_socket.close() | ||
+ | recv_socket.close() | ||
+ | |||
+ | if curr_addr is not None: | ||
+ | curr_host = "%s (%s)" % (curr_name, curr_addr) | ||
+ | else: | ||
+ | curr_host = " | ||
+ | print " | ||
+ | |||
+ | ttl += 1 | ||
+ | if curr_addr == dest_addr or ttl > max_hops: | ||
+ | break | ||
+ | |||
+ | return 0 | ||
+ | |||
+ | if __name__ == " | ||
+ | parser = optparse.OptionParser(usage=" | ||
+ | parser.add_option(" | ||
+ | help=" | ||
+ | default=33434, | ||
+ | parser.add_option(" | ||
+ | help=" | ||
+ | default=30, metavar=" | ||
+ | options, args = parser.parse_args() | ||
+ | if len(args) != 1: | ||
+ | parser.error() | ||
+ | else: | ||
+ | dest_name = args[0] | ||
+ | sys.exit(main(dest_name=dest_name, | ||
+ | port=int(options.port), | ||
+ | max_hops=int(options.max_hops))) | ||
+ | |||
+ | </ | ||
vmware/traceroute.1352398889.txt.gz · Last modified: 2012/11/08 18:21 (external edit)