Question

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

Was it helpful?

Solution 2

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

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top