Hello,
je sais que les prog de traceroute d'aujourd'hui utilisent udp pour qu'un utilisateur sans les droit root puissent l'exécuter. Ce que je ne comprend pas c'est comment cela fonctionne vu qu'effecivement les paquets udp sont envoyé avec des ttl qui augmentent mais les erreurs sont renvoyées en ICMP (donc il faut ouvrir un raw socket pour les recevoir...).
J'ai analysé avec tcpdump et effectivement, on a aucun reply udp mais que icmp, je ne comprend pas d'ou sortent les adresses des routeurs et comment elles sont remontées au programme (vu qu'il n'y a pas de raw socket ouverts en user à part socket(PF_NETLINK, SOCK_RAW, 0) (vu avec strace))
J'essaie de voir avec le code source des traceroute en ce moment mais je ne suis toujours pas au clair...
Si quelqu'un sait la réponse merci.
# bon j'ai compris...
Posté par RB . Évalué à 1.
recvmsg(sk, &msg, MSG_ERRQUEUE)
On va avoir les erreurs dans msg (struct msghdr). Ensuite il faut parser le tout et on peut retrouver différentes sources d'erreurs dont les erreurs ICMP.
man recvfrom
man cmsg
Bref, si on ne peut pas écouter les erreurs ICMP directement en raw socket, le noyau nous permet de les récupèrer quand même indirectement via ce méchanisme.
[^] # Re: bon j'ai compris...
Posté par peck (site web personnel) . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.