Как получить мой публичный IP-адрес из сообщения привязки XMPP? - PullRequest
0 голосов
/ 16 декабря 2010

Я пишу приложение для Android и мне нужно знать мой публичный IP. В моем приложении я использую библиотеку Smack для общения с XMPP-сервером (для этого нужно было не только знать мой IP)

Привязанное сообщение, полученное с сервера, выглядит так:

<iq id="_xmpp_bind1" type="result">
   <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
      <jid>user@jabber.example.com/Smack</jid>
   </bind>
</iq>

Но я жду, как это выглядит:

<iq id="_xmpp_bind1" type="result">
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
       <jid>user@jabber.example.com/11.22.33.44:12345</jid
    </bind>
</iq>

Где вместо 11.22.33.44 должен быть мой публичный IP.

Ответы [ 2 ]

1 голос
/ 17 декабря 2010

Какой сервер XMPP вы используете?

Вероятно, вы захотите решить эту проблему иначе, чем вы предлагаете.Ваш подход будет передавать ваш реальный IP-адрес всем в вашем списке.Например, HTTP-запрос к http://ifconfig.me/ вернет ваш внешний IP-адрес без лишних хлопот.

0 голосов
/ 17 декабря 2010

Я нашел причину проблемы. Моя библиотека Smack сама провоцирует сервер на отправку такого ответа связывания.

Отправляет запрос на привязку:

<iq id="Um486-7" type="set">
   <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
      <resource>Smack</resource>
   </bind>
</iq>

Таким образом, ресурс указывается явно запросом Smack на привязку. Такая ситуация возникает при использовании метода:

public void login (String username, String password)

Чтобы избежать такого поведения, следует использовать следующий метод:

public void login (String username, String password, String resource)

и resource должны быть установлены на null

...