Wie kann ich meine öffentliche IP von XMPP binden Nachricht bekommen?
Frage
Ich schreibe Android App und Notwendigkeit, meine öffentliche IP zu kennen. In meiner app verwende ich Smack Bibliothek für ein Gespräch mit XMPP-Server (die nicht nur benötigt, um weiß, dass mein IP)
Bind-Nachricht vom Server empfangen aussieht wie:
<iq id="_xmpp_bind1" type="result">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<jid>user@jabber.example.com/Smack</jid>
</bind>
</iq>
Aber ich warte es aussieht:
<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>
Wo statt 11.22.33.44 sollte meine öffentliche IP sein.
Lösung 2
fand ich die Ursache des Problems. Meine Smack Bibliothek selbst provoziert Server so binden Antwort zu senden.
Es sendet solche Bindungsanforderung:
<iq id="Um486-7" type="set">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>Smack</resource>
</bind>
</iq>
So Ressource angegeben wird explizit von Smack der Bindungsanforderung. Diese Situation wird entsteht, wenn Methode:
public void login (String username, String password)
Um ein solches Verhalten zu vermeiden nächsten Methode verwendet werden soll:
public void login (String username, String password, String resource)
und resource
sollte null
Andere Tipps
Was XMPP-Server verwenden Sie?
Es ist wahrscheinlich, würden Sie dies eine andere Art und Weise als Sie vorschlagen zu lösen. Ihr Ansatz würde Ihre echte IP-Adresse zu jedem auf Ihrem Roster lecke. Zum Beispiel wird eine HTTP-Anfrage an http://ifconfig.me/
zurückkehrt Ihre externe IP-Adresse ohne zusätzlichen Aufwand.