开发者

How to get my public IP from XMPP bind message?

开发者 https://www.devze.com 2023-01-30 17:45 出处:网络
I\'m writing Android app and need to know my public IP. In my app i\'m using Smack library for conversation with XMPP server (that needed not only to know my IP)

I'm writing Android app and need to know my public IP. In my app i'm using Smack library for conversation with XMPP server (that needed not only to know my IP)

Bind message, received from server looks like:

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

But I'm waiting it looks like:

<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>

Where instead of 11.22.33.44 should be my public IP.


What XMPP server are you using?

It's likely you'd want to solve this a different way than you're proposing. Your approach would leak your real IP address to everyone on your roster. For example, an HTTP request to http://ifconfig.me/ will return your external IP address without any extra hassle.


I found the cause of problem. My Smack library itself provokes server to send such bind response.

It sends such bind request:

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

So resource is specified explicitly by Smack's bind request. That situation is arises when using method:

public void login (String username, String password)

To avoid such behavior next method should be used:

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

and resource should be set to null

0

精彩评论

暂无评论...
验证码 换一张
取 消