如何使用 Mosquitto MQTT 获取客户端 IP

How to get client IP using Mosquitto MQTT

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

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

如果启用了日志记录,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).

这显示了一个从本地主机连接的新客户端,包括客户端 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设置为客户端ID。不过要小心。如果有人已经占用了此客户端 ID,您将断开连接,原因代码为 1。

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