Bonjour,
je dois coder la commande
traceroutedisponible sous unix en utilisant le langage C mais je ne sais pas vraiment comment m'y prendre avec tous les cours qui ont sauté ...
Si quelqu'un pouvait m'aider ?
Merci
|
|
|
|
Salut qu'entend tu par coder?
|
Le concept du traceroute, c'est d'envoyer un paquet UDP avec un TTL de 1. Le paquet meurt, et le premier routeur atteint renvoie un paquet ICMP annonçant que le paquet à atteint un TTL de 0 (paquet mort). On recupère ainsi l'ip du premier routeur. Puis on re commence avec un TTL de 2, puis de 3 et ainsi de suite jusqu'à atteindre la destination.
|
Bonjour,
|
Une fois que tu aura réussi à faire un traceroute vers 1 IP à la foi, le reste viendras, c'est juste une histoire de thread ou de fork.
|
En effet avec google :
|
Bonjour,
Il s'agit d'écrire un programme (ou un ensemble de programmes) permettant d'effectuer des traceroute automatiquement, en tâche de fond ; et pendant que se font ces traceroute, de rassembler des informations sur le graphe d'Internet. En particulier, pour chaque noeud du graphe (on assimilera un noeud à son adresse IP), on souhaite pouvoir connaître ses voisins, ainsi que sa distance minimale à l' « origine » (la distance n'est pas forcément constante, par exemple entre le noeud A et le noeud B, le noeud X peut apparaître en 5è position ; et le même noeud X peut apparaître en 8è position entre le noeud A et le noeud C -- c'est surprenant, mais c'est possible!). Il est indispensable de pouvoir : * avoir plusieurs traceroute s'effectuant simultanément, afin de rassembler des informations le plus vite possible ; * pouvoir choisir à la volée combien de traceroute on souhaite exécuter en parallèle) ; * ajouter de nouvelles « cibles » pour traceroute pendant que l'ensemble fonctionne ; * ajouter des cibles « aléatoires » (en tirant des adresses IP au hasard) ; * visualiser des statistiques indiquant le nombre d'adresses IP « explorées » (nombre total, et classement par distance par rapport à l'origine) ; * indiquer les « voisins » d'un noeud donné par son adresse IP ; * exporter (et importer) l'état du graphe, sous forme de deux fichiers CSV : un contenant la liste des sommets (adresses IP) avec leur distance minimale à la source, et un autre contenant une liste de couples d'adresses IP ; * fournir un rapport expliquant les structures algorithmiques utilisées, avec une indication de leurs limites (mémoire, CPU, occupation disque...) -- c'est-à-dire une étude de la complexité des algorithmes utilisés ; * présenter un code propre et lisible, autant que faire ce peu. Informations techniques Une adresse IP = 4 octets. Généralement on la représente sous la forme 134.157.0.129 (sous forme de 4 nombres entiers, en décimal, séparés par des points). Les plages d'adresses suivantes sont « privées », c'est-à-dire internes : * 10.0.0.0 à 10.255.255.255 * 172.16.0.0 à 172.31.255.255 * 192.168.0.0 à 192.168.255.255 La plage 224.0.0.0 à 239.255.255.255 est réservée au multicast. Les adresses de 240.0.0.0 à 255.255.255.255 sont réservées. Toutes ces plages (adresses privées, multicast, réservées) doivent être traitées de manière spéciale ; il est parfaitement acceptable de ne pas les stocker dans le graphe (de les considérer comme les « * » qui apparaissent parfois dans traceroute). Le format CSV à utiliser, pour la liste des noeuds : adresse IP, distance 1.2.3.4,17 134.157.0.129,8 193.55.63.92,2 Le format CSV à utiliser, pour la liste des arêtes : adresse IP1, adresse IP2 1.2.3.4,1.2.3.5 134.157.0.129,134.157.254.1 193.55.63.1,193.55.63.29 On utilisera \n comme séparateur de lignes. |
Tu devrais regarder la thèse de Neil Spring alors, où le "cheminement" que tu recherches est expliqué :
|
ou est-ce un sujet "académique" que tu dois faire à partir de rien. Je suis dans ce cas de figure Pour l'implémentation sur la partie graphe, tu peux utiliser du C++ avec la lib boost (plus précismment la BGL), un peu chaude à manipuler au début mais ultra bien faite et hyper rapide. Je dois le faire en langage C . En lisant ton post,je commence à me dire que c'est irréalisable à mon niveau. En effet,je débute à peine la programmation système . A ceci s'ajoute également des heures de cours et de TD qui n'ont pas été donnés. |
C'est clair que c'est un sujet assez long, et je parle en connaissance de cause puisque le début de ma thèse a porté sur ces problématiques.
|
Il faut donc que je lance un traceroute avec la commande shell comme celle-ci par exemple :
Détermination de l'itinéraire vers www.commentcamarche.net [163.5.255.85] avec un maximum de 30 sauts : 1 33 ms 32 ms 33 ms raspail-2-81-57-234-254.fbx.proxad.net [81.57.234.254] 2 33 ms 33 ms 33 ms vlq-6k-2-a5.routers.proxad.net [213.228.4.254] 3 33 ms 33 ms 33 ms vlq-6k-2-v802.intf.routers.proxad.net [212.27.50.46] 4 33 ms 33 ms 33 ms th1-6k-2-v806.intf.routers.proxad.net [212.27.50.41] 5 32 ms 34 ms 34 ms cbv-6k-2-v802.intf.routers.proxad.net [212.27.50.34] 6 34 ms 32 ms 33 ms ldc-6k-1-a0.routers.proxad.net [213.228.15.67] 7 35 ms 35 ms 35 ms cogent.FreeIX.net [213.228.3.187] 8 36 ms 36 ms 35 ms NeufTelecom.demarc.cogentco.com [130.117.16.22] 9 36 ms 36 ms 36 ms V3994.c1cbv.gaoland.net [212.94.162.209] 10 34 ms 34 ms 35 ms V4080.core3.cbv.gaoland.net [212.94.161.129] 11 36 ms 35 ms 37 ms 212.94.164.210 12 36 ms 36 ms 36 ms nestor.commentcamarche.org [163.5.255.85] Itinéraire déterminé. puis il faut que je recopie les adresses ip que je mettrais dans un fichier par exemple comme cela en reprenant les valeurs du traceroute précédent? 163.5.255.85 81.57.234.254 213.228.4.254 212.27.50.46 212.27.50.41 212.27.50.34 213.228.15.67 213.228.3.187 130.117.16.22 212.94.162.209 212.94.161.129 212.94.164.210 163.5.255.85 |
Non ce que je dis c'est que pour tester le traceroute que tu vas implementer, il faut faire tes tests sur une ip qui répond (par exemple 163.5.255.85, ip de commentcamarche). Mais sinon le concept du traceroute c'est bien d'envoyer des paquet avec un TTL que tu fais augmenter progressivement.
|