」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Go IoT 平台確保物聯網資料完整性

使用 Go IoT 平台確保物聯網資料完整性

發佈於2024-11-08
瀏覽:291

Securing IoT Data Integrity with Go IoT Platform

翻译:

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 的稳定性。

Go物联网开发平台解决方案

物理设备详细信息:物理设备详细信息(DeviceInfo)中有两个关键字段:推送间隔(秒)和推送时间错误(秒)。通过这两个字段,我们可以判断设备的上报行为是否异常,并进行后续的逻辑处理。

计算方法

要计算设备的上报率是否在推送间隔和误差之内,以及是否在误差之外,我们首先需要定义一些变量和条件:

  1. 设备的推送间隔表示为 ( T )(秒)。
  2. 设备的推送时间误差表示为 ( E )(秒)。
  3. 设备的实际推送间隔表示为 ( T_{\text{actual}} )(秒)。

0. 实际推送间隔的计算

  1. 首次推送时间戳:设备首次推送数据的时间( T_{\text{1}} )。
  2. 第二次推送时间戳:设备第二次推送数据的时间( T_{\text{2}} )。
  3. 实际推送间隔: ( T_{\text{实际}} = T_2 - T_1 )

1. 是否在推送间隔内以及误差的计算

如果实际推送间隔( T_{\text{actual}} )满足以下条件,则认为设备的速率在推送间隔内并且存在错误:
[ T - E \leq T_{\text{实际}} \leq T E ]

2. 是否外部误差的计算

如果实际推送间隔( T_{\text{actual}} )不满足上述条件,则设备的速率被认为在误差之外,即:
[ T_{\text{实际}} T E ]

计算示例

认为:

  • 推送间隔(T = 60)秒
  • 推送时间误差(E = 5)秒
  • 设备于2024年9月20日10:00:00发送第一条数据(即( T_1 ))
  • 设备于2024年9月20日10:01:05(即( T_2 ))发送第二条数据

计算 ( T_{\text{实际}} )

[ 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物联网开发平台中,针对此类异常数据,我们将采取以下措施:

  1. 数据丢弃:直接丢弃超出推送间隔和错误范围的数据。消费消息队列中的消息时,直接ACK(Acknowledge)这些数据,无需持久化存储。

  2. 通过 EMQX 服务器管理工​​具进行维护

1. 通过 EMQX 黑名单排除客户端

利用 EMQX 的黑名单功能,我们可以限制恶意或异常举报客户端。下面详细分析禁用对象的优缺点及其用例:

禁用对象 优点 缺点 用例
客户端 ID - 精度高,可以直接限制特定客户端。
- 易于实现,通常客户端ID是唯一的,易于管理和跟踪。
- 如果客户端改变了ID,需要重新加入黑名单。
- 需要有机制来识别和记录客户端ID。
- 适用于需要精确控制单个设备或客户端的场景。
- 当易于识别和记录上报设备的 MQTT 客户端 ID 时。
用户名 - 可以使用同一用户名管理一组设备。
- 简化一组设备的管理。
- 不适合需要精确控制单个设备的场景。
- 如果设备共享用户名,合法设备可能会受到错误的限制。
- 适用于设备批量或按规则使用相同账号密码的场景。
- 当设备管理更加集中,不需要对单个设备进行细粒度控制时。
IP 地址 - 可以快速限制来自特定 IP 地址的所有请求。
- 对于固定 IP 地址的设备简单有效。
- 对动态 IP 或移动设备无效。
- 可能会错误地限制同一 IP 下的其他合法设备。
- 适用于设备有固定IP地址的场景。
- 当您需要快速限制来自特定IP的流量,且该IP下没有其他合法设备时。

以上三者应优先考虑Client ID。

2. 通过 EMQX 提供的 API 接口排除客户端

EMQX 提供了一个 API 接口,允许管理员从服务器上删除特定的 MQTT 客户端。需要注意的是,如果MQTT客户端实现了重连机制,单纯删除可能并不能完全删除客户端。

参考:EMQX 文档 - 客户端排除

版本聲明 本文轉載於:https://dev.to/beck_moulton/securing-iot-data-integrity-with-go-iot-platform-42gf?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-07-13
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-07-13
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-07-13
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-07-13
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-07-13
  • 切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    程式設計 發佈於2025-07-13
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-07-13
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-07-13
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-07-13
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-07-13
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-13
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-07-13
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-07-13
  • Java中Lambda表達式為何需要“final”或“有效final”變量?
    Java中Lambda表達式為何需要“final”或“有效final”變量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    程式設計 發佈於2025-07-13
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-07-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3