在Python中获取UDP数据包的TTL
我正在使用Python的socket模块进行一些基本的UDP客户端-服务器通信。我需要做的事情很简单:客户端向服务器发送一个数据包,服务器回复客户端的公网IP地址、端口号,以及一个表示UDP数据包到达服务器时的生存时间(TTL)的数字。这是我主要的问题:有没有办法通过recvfrom()之类的函数接收数据包,并读取它到达我服务器时的TTL值?
非常感谢!
Matteo Monti
3 个回答
0
据我所知,这个一般是不会直接给用户使用的。你可能需要用到像libpcap这样的工具来实现这个功能,具体可以参考这个Stack Overflow的回答:
2
Python 3.51 版本开始支持一些标志,比如 IP_RECVTTL 和 IP_RECVTOS。我试了一下,发现它在 3.x 的 Linux 内核上运行得很好。
2
我觉得你想要设置一个叫做setsockopt(IP_RECVTTL)的选项,然后使用recvmsg()函数。不过,Python的标准库里好像没有recvmsg这个函数(可以参考这个链接:http://bugs.python.org/issue6560)。所以你可能需要写一个小的C或C++共享库,这样Python就可以使用它,来实现你想要的功能。或者你也可以试试我链接的页面上的补丁。