Skip to main content
 首页 » 编程设计

python之Twisted TCP 客户端中远程对等方的 IP 地址和主机名

2025年05月04日12lhb25

编写一个使用 Twisted Words 的 Jabber 客户端。我想知道远程对等方的 IP 地址和主机名。 xmlstream.transport.getPeer().host 返回主机名,而它应该返回 IP 地址(xmlstream 是 twisted.words.protocols.jabber.xmlstream 的实例.XmlStream).

更新:是的,我的 Twisted 已经过时了,来自 Ubuntu Hardy 包:

$ python -c "import twisted; print twisted.__version__" 
2.5.0 

请您参考如下方法:

您遇到了 a bug fixed 3 years ago, in Twisted 8.2.0 .您应该升级到更新版本的 Twisted。 (我会建议 recently-announced prerelease of Twisted 11.0 ;现在是测试的好时机!)如果您在更新版本的 Twisted 中发现了这个错误,您应该重新打开那个错误,并解释如何重现它!

如果您需要支持您正在使用的任何旧版本的 Twisted,而不是 socket,它是您的 ITransport 实现的意外暴露的实现细节,您应该使用 getHandle ,这至少是已记录的公共(public)方式来获取此依赖于实现的内容,如下所示:

self.xmlstream.transport.getHandle().getpeername() 

请注意,这不适用于某些 react 器,特别是 IOCP react 器,uses something other than BSD sockets用于其网络通信。

(Jean-Paul 已经在评论中指出了其中的大部分内容,但我觉得这应该作为答案出现。)