如何从XMPP绑定消息中获取我的公共IP?

时间:2010-12-16 14:23:07

标签: android xmpp ip public smack

我正在编写Android应用,需要了解我的公共IP。在我的应用程序中,我使用Smack库与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 个答案:

答案 0 :(得分:1)

您使用的是什么XMPP服务器?

您可能希望以与您提议的方式不同的方式解决此问题。您的方法会将您的真实IP地址泄漏给名单上的每个人。例如,对http://ifconfig.me/的HTTP请求将返回您的外部IP地址而不会有任何额外的麻烦。

答案 1 :(得分:0)

我找到了问题的原因。我的Smack库本身就会激发服务器发送这样的绑定响应。

它发送这样的绑定请求:

<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