2012-02-11 5 views
1

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

спасибо!

Matteo Monti

ответ

2

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

0

Это обычно не подвергается воздействию пользовательского пространства, насколько я знаю. Я думаю, вам придется использовать что-то вроде Libpcap для достижения этой цели, как описано в этом ответе переполнением стека:

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

1

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

Смежные вопросы