翻译:
Go IoT 开发平台是使用 Go 编程语言开发的免费、高效、可扩展的物联网 (IoT) 解决方案。平台支持MQTT、HTTP、WebSocket、COAP、TCP/IP等数据传输协议,并提供基于JavaScript的报警功能和数据统计服务的轻量级配置工具。
官网:http://iot-dev-egi.pages.dev/
仓库地址:https://github.com/iot-ecology/go-iot-platform
我们正在寻找React开发工程师;欢迎您的参与。
EMQX 可以随时接收来自多个设备的秒级数据报告,但这可能不符合正常的业务流程。例如,正常情况下,设备可能每5分钟上报一次数据。为了识别上报设备是否合法,我们需要一种方法来检测该设备是否可能是恶意设备,故意频繁上报数据,影响 EMQX 的稳定性。
物理设备详细信息:物理设备详细信息(DeviceInfo)中有两个关键字段:推送间隔(秒)和推送时间错误(秒)。通过这两个字段,我们可以判断设备的上报行为是否异常,并进行后续的逻辑处理。
要计算设备的上报率是否在推送间隔和误差之内,以及是否在误差之外,我们首先需要定义一些变量和条件:
如果实际推送间隔( T_{\text{actual}} )满足以下条件,则认为设备的速率在推送间隔内并且存在错误:
[ T - E \leq T_{\text{实际}} \leq T E ]
如果实际推送间隔( T_{\text{actual}} )不满足上述条件,则设备的速率被认为在误差之外,即:
[ T_{\text{实际}} T E ]
认为:
[ T_{\text{实际}} = (10:01:05 - 10:00:00) = 65 \text{秒} ]
[ 60 - 5 \leq 65 \leq 60 5 ]
[ 55 \leq 65 \leq 65 ]
由于 ( 55 \leq 65 \leq 65 ) 成立,因此设备的速率在推送间隔和误差范围内。
由于 ( 65 ) 不小于 ( 60 5 ),因此设备的速率不在误差范围内。
通过该方法,可以准确计算出设备的实际推送间隔,并进一步分析是否符合设定的推送间隔以及错误规则。
通过前面提到的计算方法,我们可以判断上报的数据是否符合预期的推送间隔和误差范围。一般来说,符合这个范围的数据被认为是正常的,需要进行处理,而超出这个范围的数据可能被认为是异常的,应该被丢弃。在Go物联网开发平台中,针对此类异常数据,我们将采取以下措施:
数据丢弃:直接丢弃超出推送间隔和错误范围的数据。消费消息队列中的消息时,直接ACK(Acknowledge)这些数据,无需持久化存储。
通过 EMQX 服务器管理工具进行维护
利用 EMQX 的黑名单功能,我们可以限制恶意或异常举报客户端。下面详细分析禁用对象的优缺点及其用例:
禁用对象 | 优点 | 缺点 | 用例 |
---|---|---|---|
客户端 ID | - 精度高,可以直接限制特定客户端。 - 易于实现,通常客户端ID是唯一的,易于管理和跟踪。 |
- 如果客户端改变了ID,需要重新加入黑名单。 - 需要有机制来识别和记录客户端ID。 |
- 适用于需要精确控制单个设备或客户端的场景。 - 当易于识别和记录上报设备的 MQTT 客户端 ID 时。 |
用户名 | - 可以使用同一用户名管理一组设备。 - 简化一组设备的管理。 |
- 不适合需要精确控制单个设备的场景。 - 如果设备共享用户名,合法设备可能会受到错误的限制。 |
- 适用于设备批量或按规则使用相同账号密码的场景。 - 当设备管理更加集中,不需要对单个设备进行细粒度控制时。 |
IP 地址 | - 可以快速限制来自特定 IP 地址的所有请求。 - 对于固定 IP 地址的设备简单有效。 |
- 对动态 IP 或移动设备无效。 - 可能会错误地限制同一 IP 下的其他合法设备。 |
- 适用于设备有固定IP地址的场景。 - 当您需要快速限制来自特定IP的流量,且该IP下没有其他合法设备时。 |
以上三者应优先考虑Client ID。
EMQX 提供了一个 API 接口,允许管理员从服务器上删除特定的 MQTT 客户端。需要注意的是,如果MQTT客户端实现了重连机制,单纯删除可能并不能完全删除客户端。
参考:EMQX 文档 - 客户端排除
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3