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

时间:2011-03-23 14:17:25

标签: python twisted

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

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

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

2 个答案:

答案 0 :(得分:6)

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

如果您需要支持您使用的任何旧版Twisted,而不是socket,这是ITransport实施的意外公开实施细节,您应该使用{{3} },这至少是记录的,这种实现依赖的东西的公共方式,如下所示:

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

请注意,这不适用于某些反应堆,尤其是IOCP反应堆,getHandle用于网络通信。

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

答案 1 :(得分:1)

好的,我会回答我自己的问题。不得不去底层套接字获取IP地址:

ip, port = self.xmlstream.transport.socket.getpeername()

可能一个错误Twisted TCP客户端,getPeer无法正常工作。

我使用getPeer()来获取主机名。是的,这很糟糕 - 我依赖于旧的和错误的行为。请赐教 - 在Twisted的新版本中如何正确使用?