1

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

非常感谢你!

马泰奥·蒙蒂

4

3 回答 3

2

我想你想设置sockopt(IP_RECVTTL),然后使用recvmsg()。但是 Python 的标准库中似乎没有 recvmsg(请参阅http://bugs.python.org/issue6560)。因此,您可能需要编写一个小型 C 或 C++ 共享库,该库可由 Python 导入并执行您想要的操作。或者也许尝试使用我链接的页面中的补丁。

于 2012-02-11T01:52:31.897 回答
1

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

于 2016-06-08T01:08:16.180 回答
0

据我所知,这通常不会暴露给用户空间。我认为您必须使用类似 libpcap 的东西来完成此操作,如 Stack Overflow 答案中所述:

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

于 2012-02-11T01:37:06.407 回答