2012-02-11 4 views
1

J'utilise le module de socket en Python pour effectuer une communication basique client-serveur UDP. Ce que je devrais faire est assez simple: le client envoie un paquet au serveur, le serveur répond avec l'adresse IP publique du client, le port et un nombre représentant la TTL que le paquet UDP a eu quand il est arrivé au serveur. C'est mon problème principal: est-il possible de recevoir un paquet avec recvfrom() ou plus, et lire la valeur de TTL qu'il avait quand il a atteint mon serveur?Obtention du TTL du paquet UDP entrant en Python

Merci beaucoup!

Matteo Monti

Répondre

2

Je pense que vous voulez setsockopt (IP_RECVTTL), puis utiliser recvmsg(). Mais Python ne semble pas avoir recvmsg dans ses bibliothèques standard (voir http://bugs.python.org/issue6560). Donc probablement vous aurez besoin d'écrire une petite bibliothèque partagée C ou C++ qui est importable par Python et qui fait ce que vous voulez. Ou peut-être essayer d'utiliser les correctifs de la page I liée.

0

Ce ne sont généralement pas exposé à l'espace utilisateur, pour autant que je sache. Je pense que vous devrez utiliser quelque chose comme libpcap pour ce faire, tel que décrit dans cette réponse Stack Overflow:

https://stackoverflow.com/a/2362554/864393

1

Python 3.51 prend en charge les indicateurs tels que IP_RECVTTL ou IP_RECVTOS. J'ai fait un essai et cela a fonctionné pour moi dans un noyau Linux 3.x.

Questions connexes