2011-03-23 83 views
1

编写使用扭曲字的Jabber客户端。我想知道远程对端的IP地址和主机名。 xmlstream.transport.getPeer().host返回主机名,而它应该返回IP地址(xmlstreamtwisted.words.protocols.jabber.xmlstream.XmlStream的一个实例)。扭曲TCP客户端中远程对端的IP地址和主机名

更新:是的,我的扭曲是相当过时,从Ubuntu的哈迪包:

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

回答

6

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

如果您需要支持双绞线的任何旧版本,你正在使用,而不是socket,这是你的ITransport实现的意外暴露的实现细节,你应该使用getHandle,这至少证明的,公开的方式来获得在这个实现相关的东西,像这样:

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

注意,这不会对一些反应堆,特别是IOCP反应器,其uses something other than BSD sockets其网络通信工作。

(让 - 保罗已经注意到大多数的这一个评论,但我觉得这应该显示为一个答案。)

+0

谢谢你,@Glyph和@ Jean-Paul! – ash 2011-03-24 12:56:25

+0

好的,getPeer在最近的Twisted中正常工作。那我该如何获得我的TCP对等体的** hostname **?我想编写能够在旧版本和新版本中正常工作的代码。 – ash 2011-03-24 13:21:06

+0

解析IP地址,可能使用twisted.names.client.lookupPointer。 – 2011-03-24 14:28:01

1

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

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

这是可能的错误扭曲的TCP客户端getPeer无法正常工作。

我使用getPeer()来获取主机名。是的,这很糟糕 - 我依靠老旧的小车行为。请赐教 - 在新版Twisted中如何正确使用?

+4

这并不总是可行的。这听起来像是你跑进了,它在Twisted 8.2.0中修复了。如果您在更高版本的Twisted中遇到此问题,请提交错误报告! – 2011-03-23 15:50:28