6
votes

Écrire un script de base traceroute en c

Je dois écrire un script tricolet, mais je ne sais pas si mes tentatives sont correctes.

En ce moment je le fais maintenant comme ça (veuillez me corriger si je fais mal ou maladroit):

  1. a obtenu une structure pour ip- et udpheader
  2. une fonction de somme de contrôle
  3. Ouverture de 2 sockets: une pour l'envoi de paquets UDP en mode SOCK_RAW (pour manipuler TTL) et pour recevoir des réponses ICMP des routeurs.
  4. à l'aide de SendTo () pour envoyer des paquets UDP
  5. n'ayant aucun indice comment recevoir et traiter une réponse ICMP

    Y a-t-il des moyens plus confortables de changer le TTL que d'utiliser SOCK_RAW où je dois définir tous les trucs d'en-tête par moi-même? Quels paramètres dois-je utiliser pour la prise () lors de l'ouverture de la chaussette ICMP? Comment recevoir la réponse ICMP?


0 commentaires

3 Réponses :


2
votes

Quelle plate-forme ciblez-vous? Voici une saveur BSD de Source OpenBSD : xxx

sur Linux, je pense que vous devez utiliser ip_recverr et recvmsg (2) avec le Msg_errqueue , voir IP (7) .


1 commentaires

Merci pour votre réponse. Cela m'a amené un peu en avant.



2
votes

Autant que la définition du TTL est concernée, vous pouvez utiliser setSockopt () . Voici un extrait de la source de iPuttils pour ping sur Linux: xxx


1 commentaires

Merci, cela semble en faire beaucoup plus facile.



0
votes

J'ai rencontré le même problème et j'ai résolu. Vous devez

  1. Créez une nouvelle prise à l'aide du protocole ICMP
  2. se lier à un port spécifique comme 33434
  3. Recevez la réponse ICMP.

    Je vais montrer mon code. xxx

    et cela fonctionne sur mon ordinateur. (Windows 10)

    Le résultat de mon ordinateur


0 commentaires