【问题标题】:How to get IP address of chat message sender using XMPP protocol in Google App Engine?如何在 Google App Engine 中使用 XMPP 协议获取聊天消息发送者的 IP 地址?
【发布时间】:2013-01-07 21:34:42
【问题描述】:

我正在开发一个可以响应用户聊天消息的应用程序。我需要知道聊天消息发送者的 IP 地址。我在谷歌应用引擎上做我的应用程序,并使用 XMPP 协议进行聊天。如何使用XMPP协议检测聊天消息发送者的IP地址?

【问题讨论】:

  • 如果您控制客户端/应用程序并且信任不是问题,请使其检测自己的 IP 并将其作为消息的一部分发送。

标签: google-app-engine ip xmpp chat


【解决方案1】:

只有 XMPP 服务器知道 IP 地址。如果你控制 XMPP 服务器,你可以编写一个扩展,以某种方式在消息中包含 IP 地址(或检查是否已经可用)。

【讨论】:

  • 从技术上讲,您可以这样做,但请不要这样做,除非您拥有所涉及的所有机器、网络和用户。人们对他们的 IP 地址泄露感到非常不安,如果客户端和服务器之间存在 NAT,它甚至不会按您预期的方式工作。
【解决方案2】:

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>

【讨论】:

  • 欢迎来到 Stack Overflow。请在您的答案中总结链接;这样,如果链接过时,答案也不会完全没用。
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 2013-06-17
  • 2011-02-19
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2016-06-23
相关资源
最近更新 更多