【问题标题】:How to get client IP using Mosquitto MQTT如何使用 Mosquitto MQTT 获取客户端 IP
【发布时间】:2016-10-13 14:03:42
【问题描述】:

我想使用 Mosquitto MQTT 记录客户端的 IP 地址。我在服务器端使用 Paho - Python,在客户端使用 Arduino - PubSubClient。

在 PHP 中,这很简单,我只使用$_SERVER['REMOTE_ADDR']。 Mosquitto 有类似的东西吗?

【问题讨论】:

  • 你想用这些信息做什么?它只是用于调试/诊断吗?或者您是否尝试通过其他协议连接回客户端?
  • @njh 我会保留以防万一我发现系统滥用,然后我可以标记 IP。我担心这一点,因为 Arduino 无法加密消息,所以有人可以嗅探数据并欺骗一个单元
  • 与任何 IP 标记系统一样,恐怕您会标记您试图避开的路由器/NAT 系统后面的所有终端。
  • @njh:我马上就有的用途之一是我进入日志Client <unknown> closed its connection.,我想将它与该客户端的 IP 相匹配。

标签: mqtt mosquitto paho


【解决方案1】:

如果启用日志记录,新客户端连接时 Mosquitto 会记录:

Oct 13 15:09:32 bagend mosquitto[1361]: 1476367772: New connection from 127.0.0.1 on port 1883.
Oct 13 15:09:32 bagend mosquitto[1361]: 1476367772: New client connected from 127.0.0.1 as mosqsub/18943-bagend (c1, k60).

这显示了一个从 localhost 连接的新客户端,并包含客户端 ID mosqsub/18943-bagend

无法从另一个 MQTT 客户端获取它,因为每个客户端都不知道连接到代理的任何其他客户端。

编辑:mosquitto.conf 手册页暗示您可以使用配置文件中的以下内容登录到 MQTT 主题:

log_dest topic

这会记录到$SYS/broker/log/<log level>的主题

所以当你用mosquitto_sub -v -t '$SYS/broker/log/#'订阅时你会得到这样的东西

$SYS/broker/log/N 1476378785: New connection from 127.0.0.1 on port 1885.
$SYS/broker/log/N 1476378785: New client connected from 127.0.0.1 as mosqpub/4654-tiefighter (c1, k60).
$SYS/broker/log/N 1476378785: Client mosqpub/4654-tiefighter disconnected.

【讨论】:

  • 有没有办法从连接消息中刮取这个 ip 并将其带入 Paho?
  • 您始终可以解析日志,但这将是一个单独的问题。想起了什么,我更新了答案
【解决方案2】:

我只是将 IP 设置为客户端 ID。不过要小心。如果有人已经使用了此客户端 ID,您将与原因代码 1 断开连接。

或者,您可以使用用户数据字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多