【发布时间】:2013-01-07 21:34:42
【问题描述】:
我正在开发一个可以响应用户聊天消息的应用程序。我需要知道聊天消息发送者的 IP 地址。我在谷歌应用引擎上做我的应用程序,并使用 XMPP 协议进行聊天。如何使用XMPP协议检测聊天消息发送者的IP地址?
【问题讨论】:
-
如果您控制客户端/应用程序并且信任不是问题,请使其检测自己的 IP 并将其作为消息的一部分发送。
标签: google-app-engine ip xmpp chat
我正在开发一个可以响应用户聊天消息的应用程序。我需要知道聊天消息发送者的 IP 地址。我在谷歌应用引擎上做我的应用程序,并使用 XMPP 协议进行聊天。如何使用XMPP协议检测聊天消息发送者的IP地址?
【问题讨论】:
标签: google-app-engine ip xmpp chat
只有 XMPP 服务器知道 IP 地址。如果你控制 XMPP 服务器,你可以编写一个扩展,以某种方式在消息中包含 IP 地址(或检查是否已经可用)。
【讨论】:
How to get my public IP from XMPP bind message?
http://xmpp.org/extensions/xep-0279.html
首先,客户端向其服务器发送一个 IQ-get 请求。
示例 1. 客户端向服务器请求其 IP 地址
<iq from='romeo@montague.lit/orchard'
id='ik2s7159'
type='get'>
<address xmlns='urn:xmpp:sic:1'/>
</iq>
然后服务器返回一个 IQ 结果,其中包含一个元素,该元素包含一个指定客户端外部 IP 地址的元素,以及一个可选的指定客户端外部端口的元素。
示例 2. 服务器返回 IP 地址和端口
<iq id='ik2s7159'
to='romeo@montague.lit/orchard'
type='result'>
<address xmlns='urn:xmpp:sic:1'>
<ip>192.168.4.1</ip>
<port>12345</port>
</iq>
请注意,IP 地址可以是 IPv4 或 IPv6。
示例 3. 服务器返回 IPv6 地址
<iq id='ik2s7159'
to='romeo@montague.lit/orchard'
type='result'>
<address xmlns='urn:xmpp:sic:1'>
<ip>2001:db8::9:1</ip>
<port>12345</port>
</address>
</iq>
【讨论】: