Android 如何从XMPP绑定消息获取我的公共IP?
我正在编写Android应用程序,需要知道我的公共IP。在我的应用程序中,我使用库与XMPP服务器进行对话(这不仅需要知道我的IP) 从服务器接收的绑定消息如下所示:Android 如何从XMPP绑定消息获取我的公共IP?,android,xmpp,ip,public,smack,Android,Xmpp,Ip,Public,Smack,我正在编写Android应用程序,需要知道我的公共IP。在我的应用程序中,我使用库与XMPP服务器进行对话(这不仅需要知道我的IP) 从服务器接收的绑定消息如下所示: <iq id="_xmpp_bind1" type="result"> <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> <jid>user@jabber.example.com/Smack</jid> </
<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>
user@jabber.example.com/扑通
但我在等它看起来像:
<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>
user@jabber.example.com/11.22.33.44:12345您使用的是什么XMPP服务器
很可能你想用一种不同于你所提议的方式来解决这个问题。你的方法会把你的真实IP地址泄露给你名册上的每个人。例如,对http://ifconfig.me/
将返回您的外部IP地址,无需任何额外的麻烦。我找到了问题的原因。我的Smack库本身激发服务器发送这样的绑定响应
它发送这样的绑定请求:
<iq id="Um486-7" type="set">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>Smack</resource>
</bind>
</iq>
为避免此类行为,应使用下一种方法:
public void login (String username, String password, String resource)
而且resource
应该设置为null
我连接到自己的服务器,并且花名册中没有包含来自真实用户的信息。它只有一个伙伴,而且是一个机器人:)所以IP地址泄露不是一件坏事。就使用诸如-之类的辅助服务而言,这是一个合理的决定,但不是最好的。在这种情况下,我的应用程序将依赖于辅助服务。而且它会产生额外的流量(返回的页面不是很重,但是有很多无用的数据),所以根据您下面的回答,您的问题实际上是“如何让服务器在绑定期间为我分配JID资源”?您没有提到您有一个自定义服务器,它将用户的IP地址分配为资源。您还可以将服务器配置为忽略来自客户端的请求绑定参数,并始终发送自定义IP相关资源。