IP-адрес и имя хоста удаленного узла в клиенте Twisted TCP - PullRequest
1 голос
/ 23 марта 2011

Написание Jabber-клиента, использующего Twisted Words.Я хотел бы знать 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

Ответы [ 2 ]

6 голосов
/ 23 марта 2011

Вы столкнулись с ошибкой, исправленной 3 года назад в Twisted 8.2.0 . Вам следует перейти на более свежую версию Twisted. (Я бы предложил недавно анонсированный предварительный выпуск Twisted 11.0 ; сейчас самое время протестировать!) Если вы обнаружили эту ошибку в более поздней версии Twisted, вам следует снова открыть эту ошибку и объяснить как это воспроизвести!

Если вам нужно поддерживать любую более старую версию Twisted, которую вы используете, вместо socket, которая представляет собой случайно раскрытую деталь реализации вашей ITransport реализации, вы должны использовать getHandle, который является, по крайней мере, документированным , публичным способом получить доступ к этому зависящему от реализации материалу, как это:

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

Обратите внимание, что это не будет работать на некоторых реакторах, в частности, на реакторе IOCP, который использует что-то отличное от разъемов BSD для своей сетевой связи.

(Жан-Поль уже отметил большую часть этого в комментарии, но я чувствовал, что это должно появиться как ответ.)

1 голос
/ 23 марта 2011

Хорошо, я отвечу на свой вопрос.Пришлось перейти к соответствующему сокету, чтобы получить IP-адрес:

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

Это Вероятно Ошибка Twisted TCP-клиент, который getPeer не работает правильно.getPeer () чтобы получить имя хоста.Да, это плохо - я полагаюсь на старое и глючное поведение.Пожалуйста, просветите меня - как это правильно сделать в новой версии Twisted?

...