编写使用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
答案 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的新版本中如何正确使用?