问题描述:

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>[email protected]/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>[email protected]/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

相关阅读:
Top