在Python中获取传入UDP数据包的TTL

时间:2012-02-11 01:28:10

标签: python sockets udp ip ttl

我正在使用Python中的套接字模块进行一些基本的UDP客户端 - 服务器通信。我需要做的很简单:客户端向服务器发送数据包,服务器使用客户端的公共IP地址,端口和代表UDP数据包到达服务器时的TTL的数字进行回答。这是我的主要问题:有没有办法用recvfrom()左右接收数据包,并读取它到达我服务器时的TTL值?

非常感谢!

Matteo Monti

3 个答案:

答案 0 :(得分:2)

我认为你想要setsockopt(IP_RECVTTL),然后使用recvmsg()。但是Python似乎没有在其标准库中使用recvmsg(参见http://bugs.python.org/issue6560)。因此,您可能需要编写一个可由Python导入的小型C或C ++共享库,它可以满足您的需求。或者尝试使用第一页链接的补丁。

答案 1 :(得分:1)

Python 3.51支持IP_RECVTTL或IP_RECVTOS等标志。我试了一下它在3.x linux内核中对我有用。

答案 2 :(得分:0)

据我所知,这通常不会暴露给用户空间。我认为你必须使用像libpcap这样的东西才能完成这个,正如Stack Overflow回答所述:

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