Comment obtenir mon adresse IP publique du message bind XMPP?
Question
J'écris application Android et le besoin de connaître mon adresse IP publique. Dans mon application j'utilise la bibliothèque Smack pour la conversation avec le serveur XMPP (qui avait besoin non seulement connaître mon adresse IP)
Bind message, reçu des regards de serveur comme:
<iq id="_xmpp_bind1" type="result">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<jid>user@jabber.example.com/Smack</jid>
</bind>
</iq>
Mais je suis en attente, il ressemble à:
<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>
Si au lieu de 11.22.33.44 devrait être mon IP publique.
La solution 2
J'ai trouvé la cause du problème. Ma bibliothèque Smack lui-même provoque serveur pour envoyer cette réponse de liaison.
Il envoie cette demande de liaison:
<iq id="Um486-7" type="set">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>Smack</resource>
</bind>
</iq>
ressource est donc explicitement spécifié par la demande de liaison de Smack. Cette situation est survient lorsque vous utilisez la méthode:
public void login (String username, String password)
Pour éviter un tel comportement méthode suivante doit être utilisée:
public void login (String username, String password, String resource)
et resource
doit être réglé sur null
Autres conseils
Qu'est-ce que le serveur XMPP utilisez-vous?
Il est probable que vous voudriez résoudre ce une manière différente de celle que vous proposez. Votre approche fuirait votre adresse IP réelle à tout le monde sur votre liste. Par exemple, une requête HTTP à http://ifconfig.me/
retournera votre adresse IP externe sans tracas supplémentaire.