如何从 XMPP 绑定消息获取我的公共 IP?
我正在编写 Android 应用程序,需要知道我的公共 IP。在我的应用程序中,我使用 Smack 库与 XMPP 服务器进行对话(这不仅需要知道我的 IP)
从服务器收到的绑定消息看起来像:
<iq id="_xmpp_bind1" type="result">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<jid>[email protected]/Smack</jid>
</bind>
</iq>
但我正在等待它看起来像:
<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>
其中而不是 11.22.33.44 应该是我的公共 IP。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您使用什么 XMPP 服务器?
您可能希望以与您提议的不同的方式来解决这个问题。您的方法会将您的真实 IP 地址泄露给名册上的每个人。例如,对
http://ifconfig.me/
的 HTTP 请求将返回您的外部 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.我找到了问题的原因。我的 Smack 库本身会激发服务器发送此类绑定响应。
它发送这样的绑定请求:
因此资源是由 Smack 的绑定请求显式指定的。
使用方法时会出现这种情况:
为了避免这种行为,应该使用下一个方法:
并且
resource
应该设置为null
I found the cause of problem. My Smack library itself provokes server to send such bind response.
It sends such bind request:
So resource is specified explicitly by Smack's bind request.
That situation is arises when using method:
To avoid such behavior next method should be used:
and
resource
should be set tonull