Получение TTL входящего UDP-пакета в Python - PullRequest
1 голос
/ 11 февраля 2012

Я использую модуль сокетов в Python, чтобы выполнить базовую связь между клиентом и сервером UDP. То, что мне нужно сделать, довольно просто: клиент отправляет серверу пакет, сервер отвечает открытым IP-адресом клиента, портом и числом, представляющим TTL, который был у UDP-пакета, когда он попадал на сервер. Это моя главная проблема: есть ли способ получить пакет с помощью recvfrom () или около того, и прочитать значение TTL, которое он имел, когда он достиг моего сервера?

Большое спасибо!

Маттео Монти

Ответы [ 3 ]

2 голосов
/ 11 февраля 2012

Я думаю, что вы хотите установить setsockopt (IP_RECVTTL) и затем использовать recvmsg ().Но Python, похоже, не имеет recvmsg в своих стандартных библиотеках (см. http://bugs.python.org/issue6560).). Поэтому, возможно, вам потребуется написать небольшую разделяемую библиотеку C или C ++, которая будет импортирована Python и которая делает то, что вы хотите.используя патчи со страницы, на которую я ссылаюсь.

1 голос
/ 08 июня 2016

В Python 3.51 есть поддержка таких флагов, как IP_RECVTTL или IP_RECVTOS. Я дал ему попробовать, и он работал для меня в ядре 3.x Linux.

0 голосов
/ 11 февраля 2012

Насколько я знаю, это, как правило, не доступно пользователям. Я думаю, вам придется использовать что-то вроде libpcap, чтобы выполнить это, как описано в ответе на переполнение стека:

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

...