Besoin d’aide pour dépanner traceroute dans Unix

J’ai un programme Paceron traceroute pour un système Unix qui imprime le chemin que prennent les paquets pour aller de la machine locale à une destination – c’est-à-dire la séquence de routeurs que traversent les paquets. Le problème est que je reçois une sortie qui affiche:

traceroute to yahoo.co.in (68.180.206.184), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * * * 8 * * * 9 * * * . . . 30 * * * 

J’ai une connexion DSL. Le programme fonctionne bien avec la ligne de commande Windows (cmd.exe). Quelle est la raison exacte de la sortie ci-dessus?

Le code ressemble à ceci:

 #!/usr/bin/python import socket def main(dest_name): dest_addr = socket.gethostbyname(dest_name) port = 33434 max_hops = 30 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) recv_socket.bind(("", port)) send_socket.sendto("", (dest_name, port)) curr_addr = None curr_name = None try: _, 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 "%d\t%s" % (ttl, curr_host) ttl += 1 if curr_addr == dest_addr or ttl > max_hops: break if __name__ == "__main__": main('yahoo.co.in')** 

traceroute / tracert agit différemment sous Linux et Windows.

Linux enverra un paquet UDP avec un TTL décroissant et écoutera les réponses ICMP. Windows envoie les demandes d’écho ICMP et écoute les réponses ICMP.

La version de Python échoue car les paquets UDP sont bloqués.

Sur les systèmes d’exploitation de type Unix, l’utilitaire traceroute utilise par défaut les datagrammes UDP (User Datagram Protocol) avec les numéros de port de destination de 33434 à 33534. L’utilitaire traceroute a généralement la possibilité de spécifier l’utilisation de la requête d’écho ICMP (type 8). utilisé par l’utilitaire Windows tracert.

http://en.wikipedia.org/wiki/Traceroute