2017-09-19 2 views
1

Le noyau Linux offre plusieurs moyens d'obtenir des horodatages pour les paquets reçus (SO_TIMESTAMP, SO_TIMESTAMPNS, SO_TIMESTAMPING) ou envoyés (SO_TIMESTAMPING).Horodatage réseau Python (SO_TIMESTAMP, SO_TIMESTAMPNS, SO_TIMESTAMPING)

Kernel Doc: https://www.kernel.org/doc/Documentation/networking/timestamping.txt

Est-il possible que je peux l'utiliser avec Python? Je ne vois aucune constante SO_TIMESTAMP dans les sources Python. Essayé 3.6.2 et la branche maître GitHub.

À l'heure actuelle, je ne peux utiliser que SIOCGSTAMP qui me donne l'horodatage du dernier paquet reçu et rien ne semble disponible pour l'horodatage des paquets envoyés.

+0

On dirait que Fedora expédie python2 avec quelques-unes de ces constantes de socket en utilisant le patch C suivant. Il peut probablement être adapté à python3. https://github.com/fedora-python/python2-spec/blob/master/python-2.7rc1-socketmodule-constants.patch –

Répondre

0

Enfin, je suis en mesure d'obtenir la valeur SO_TIMESTAMPNS comme ceci:

SO_TIMESTAMPNS = 35 
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3)) 
s.setsockopt(socket.SOL_SOCKET, SO_TIMESTAMPNS, 1) 
raw_data, ancdata, flags, address = s.recvmsg(65535, 1024) 

ancdata [0] [2] est l'horodatage du matériel comme timespec (ulong, ulong).

Fonctionne sous Linux mais pas sur Mac OS X. Non testé sous Windows.