2011-03-23 3 views
1

Twisted Words를 사용하는 Jabber 클라이언트 작성. 원격 피어의 IP 주소와 호스트 이름을 알고 싶습니다. xmlstream.transport.getPeer().host 호스트 이름을 반환하고 IP 주소 (xmlstreamtwisted.words.protocols.jabber.xmlstream.XmlStream의 인스턴스 임)를 반환해야합니다.Twisted TCP 클라이언트의 원격 피어의 IP 주소 및 호스트 이름

업데이트 : 예, 트위스트 우분투 하디 패키지에서, 오히려 오래된 :

$ 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의 최신 버전에서이 버그를 발견했다면, 그 버그를 다시 열고 그것을 재현하는 방법을 설명해야합니다!

당신이 당신의 ITransport 구현의 실수로 노출 구현 세부, 이는 오히려 socket보다, 사용하고있는 트위스트의 어떤 이전 버전을 지원해야하는 경우, 인, getHandle를 사용한다 적어도 문서화 된 , 공개 방법은 다음과 같이,이 구현에 의존 물건에서 얻을 수 있습니다 :이 일부 원자로, 특히 IOCP 반응기, 네트워크 통신을위한 uses something other than BSD sockets에 작동하지 않습니다

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

참고.

는 (장 폴은 이미 의견이 대부분을 언급,하지만 난이 답변으로 표시한다 느꼈다.)이 항상 작동하지 않습니다

+0

@ Glyph와 @ Jean-Paul 감사합니다. – ash

+0

최근 Twisted에서는 getPeer가 올바르게 작동합니다. 그런 다음 TCP 피어의 ** 호스트 이름 **을 얻으려면 어떻게해야합니까? 이전 버전과 새 버전에서 올바르게 작동하는 코드를 작성하고 싶습니다. – ash

+0

아마도 twisted.names.client.lookupPointer를 사용하여 IP 주소를 확인하십시오. –

1

좋아, 난 내 자신의 질문에 대답합니다. IP 주소를 얻기 위해 기본 소켓에 가야했다 : 그것은

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

가능성이 getPeer가 제대로 작동하지 않는 버그 트위스트 TCP 클라이언트.

그리고 getPeer()를 사용하여 호스트 이름을 가져옵니다. 예, 나빠요 - 오래되고 버그가 많은 행동에 의존하고 있습니다. 제발 날 깨우십시오 - 어떻게 새 버전의 Twisted에서 제대로합니까?

+4

. Twisted 8.2.0에서 수정 된 로 들어간 것 같습니다. Twisted 이후 버전에서이 문제가 발생하는 경우 버그 보고서를 제출하십시오! –

관련 문제