2010-12-16 1 views
0

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

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

<iq id="_xmpp_bind1" type="result"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
     <jid>[email protected]/Smack</jid> 
    </bind> 
</iq> 

Но я его жду выглядит следующим образом:

<iq id="_xmpp_bind1" type="result"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
     <jid>[email protected]/11.22.33.44:12345</jid 
    </bind> 
</iq> 

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

+2

Так на основе вашего ответа ниже, ваш вопрос был на самом деле «Как мне заставить сервер назначить мне ресурс JID во время связывания»? И вы не указали, что у вас есть настраиваемый сервер, который выделяет IP-адрес пользователя в качестве ресурсов. – 2010-12-17 12:56:43

ответ

0

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

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

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

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

public void login (String username, String password) 

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

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

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

1

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

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

+0

Я подключаюсь к своему серверу, а список не содержит реальных людей. У него только один приятель, и он бот :) Так что утечка IP-адреса - это не плохо. – Alexander 2010-12-17 12:25:59

+0

С точки зрения использования бокового сервиса, например http://ifconfig.me/ - это разумное решение, но не самое лучшее. В этом случае мое приложение становится зависимым от бокового сервиса. И он генерирует дополнительный трафик (возвращаемая страница не очень тяжелая, но содержит много бесполезных данных). – Alexander 2010-12-17 12:33:02