登录
首页 >  Golang >  Go问答

物联网设备生成全球唯一身份的最佳方法

来源:stackoverflow

时间:2024-02-23 15:15:25 190浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《物联网设备生成全球唯一身份的最佳方法》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有一个用 Golang 开发的用于 IoT 设备的应用程序,它通过 MQTT 进行通信,并且该应用程序也可以安装在任何支持 Docker 和 Golang 的设备上。

现在,当我第一次在设备上运行应用程序时,我想为每个设备自动生成应用程序的唯一标识。 我正在考虑使用永久 MAC 或序列号,这是个好方法吗?所有设备都会有永久 MAC 或序列号吗?如果没有,那么实现这一目标的更好方法是什么。


正确答案


绝对不能保证您的设备会有序列号或 mac 地址,更不用说是唯一的了。

关于序列号,每个设备制造商都有自己的做法。那些具有可通过软件访问的序列号的设备通常会将其烧录到 eeprom 中的某个位置,需要特殊的工具才能读取它。您需要了解每个目标设备的过程和运行工具。

关于 mac,如果您的设备有 wifi 或以太网接口,那么制造商可能已为其分配了全球唯一的 mac 地址。但是,您需要找到相关的网络接口并读取其 mac 地址。这会相当麻烦,因为您必须发现网络接口系统,确定它是否是物理接口(相对于拨号、桥接、vpn 等虚拟接口)并读取其 mac。最后,有些设备根本没有任何物理 wifi 或以太网接口 - 它们可能配备 gsm 模块或 lora 或完全其他的东西。

我建议不要依赖 mac 或串行。首次启动时生成您自己的 guid,将其存储在配置中并用于后续识别。

ps - 我假设您的目标是运行 linux 或其他桌面操作系统的较大设备。微控制器通常不支持 go,当然也不支持 docker。

尝试从以下代码中获得一些灵感:

package main

import (
    "crypto/sha1"
    "encoding/hex"
    "fmt"
    "time"
)

// SHA1 hashes using sha1 algorithm
func SHA1(text string) string {
    algorithm := sha1.New()
    algorithm.Write([]byte(text))
    return hex.EncodeToString(algorithm.Sum(nil))
}

func main() {
    var macAddress = "00:00:00:00:00:00"
    var deviceType = "deviceType"
    var deviceName = "deviceName"
    var deviceModel = "deviceModel"
    var deviceManufacturer = "deviceManufacturer"
    var deviceVersion = "deviceVersion"
    var deviceSerialNumber = "deviceSerialNumber"
    var timeInMilliseconds = time.Now().UnixNano() / int64(time.Millisecond)
    // convert time to string
    var timeString = fmt.Sprintf("%d", timeInMilliseconds)
    var conc = macAddress + "-" + deviceType + "-" + deviceName + "-" + deviceModel + "-" + deviceManufacturer + "-" + deviceVersion + "-" + deviceSerialNumber + "-" + timeString

    // calculate the uuid using the sha256 algorithm
    // and the concatenated string
    var uuid = SHA1(conc)
    fmt.Println(uuid)

}
  • mac 地址主要由设备制造商分配,因此通常称为内置地址、以太网硬件地址、硬件地址或物理地址。
  • 序列号使公司能够识别产品并获取有关该产品的更多信息以进行更换或查找兼容零件

以上就是《物联网设备生成全球唯一身份的最佳方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>