0

我正在编写 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。

4

2 回答 2

1

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

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

于 2010-12-16T22:42:04.330 回答
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

于 2010-12-17T12:41:45.490 回答