在Python中获取UDP数据包的TTL

1 投票
3 回答
3096 浏览
提问于 2025-04-17 12:49

我正在使用Python的socket模块进行一些基本的UDP客户端-服务器通信。我需要做的事情很简单:客户端向服务器发送一个数据包,服务器回复客户端的公网IP地址、端口号,以及一个表示UDP数据包到达服务器时的生存时间(TTL)的数字。这是我主要的问题:有没有办法通过recvfrom()之类的函数接收数据包,并读取它到达我服务器时的TTL值?

非常感谢!

Matteo Monti

3 个回答

0

据我所知,这个一般是不会直接给用户使用的。你可能需要用到像libpcap这样的工具来实现这个功能,具体可以参考这个Stack Overflow的回答:

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

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就可以使用它,来实现你想要的功能。或者你也可以试试我链接的页面上的补丁。

撰写回答