XMPPバインドメッセージから私の公開IPを取得する方法は?
質問
私はAndroidアプリを書いていますが、私の公開IPを知る必要があります。私のアプリで私が使用しています スマック 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
問題の原因を見つけました。私のスマックライブラリ自体は、サーバーを引き起こし、そのようなバインド応答を送信します。
そのようなバインドリクエストを送信します:
<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
他のヒント
どのXMPPサーバーを使用していますか?
これをあなたが提案しているのとは別の方法で解決したいと思うでしょう。あなたのアプローチは、あなたの名簿上のすべての人にあなたの本当のIPアドレスを漏らします。たとえば、HTTP要求へのリクエスト http://ifconfig.me/
余分な手間をかけずに外部IPアドレスを返します。
所属していません StackOverflow