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