获取计算机唯一识别码的问题,有大佬有经验吗?

2020-11-09 20:54:38 +08:00
 PUBG98k
Windows,macOS.下
如何给计算机 生成绝对唯一的 识别码.类似 Teamviewer 的 ID.
------------
需要考虑到 VMWARE 系统,以及服务器 云机.Ghost 系统.
------------
目前 ToDesk 使用的是:
uuid+mac,但是依然还是不行.
---
uuid 在 ghost 系统会重复,mac 地址重复.

系统安装时间,Win10 在更新补丁的时候,会更改.

硬盘序列号,在 vmware 的系统里是没有硬盘序列号的.
cpu 序列号 也是不唯一了.现在都改成生产批号了.

服务器系统又没有鼠标键盘显卡可以获取唯一码.
蛋疼~~~
10044 次点击
所在节点    程序员
66 条回复
xiangyuecn
2020-11-10 09:10:35 +08:00
同 Android 里面某些 app,win 、mac 同样往根目录拉屎就完了,多拉几个地方多拉几坨,隐藏起来
cigarzh
2020-11-10 09:23:02 +08:00
device fingerprint 是个很大的坑,
建议造不如买
3dwelcome
2020-11-10 09:26:33 +08:00
@msg7086 "同理 MAC 也可以相同。起来的两台虚拟机就是完全一样的。"
这个分两种情况,第一种是一台设备上,同时启动两个 MAC 一模一样的虚拟机,由于 IP 包的转发依赖的是 MAC 地址,理论上多开会遇到问题。
第二种是先把旧虚拟机关闭,只用新镜像虚拟机启动,MAC 一样,这情况应该允许客户被识别为一个 ID 。因为没有同时多开。
kuro1
2020-11-10 10:14:18 +08:00
硬盘序列号?
DoctorCat
2020-11-10 10:41:20 +08:00
方向不对,努力白费。
zouri
2020-11-10 10:52:26 +08:00
@Greatshu 这个靠谱,出现相同的之后强制掉线一个,或者重新下发一个 uuid
msg7086
2020-11-10 11:06:55 +08:00
@3dwelcome MAC 冲突只会出现在单个物理连接上(不论是真物理还是虚拟物理)。
前面各加一级交换机就没事了。
gkuchan
2020-11-10 11:15:45 +08:00
我研究过这个问题,采用的方案是:uuid+mac

1. uuid 在不用的 vm 上面可以保证不一致,这个是云服务商保证的。从 snapshot 创建的 vm 也不一致。

wmic path win32_computersystemproduct get uuid

2. mac 地址主要用于区分 container,要注意,每一台机器上的 container 的 mac 地址都是从同一个地址开始增长的
Greatshu
2020-11-10 11:45:03 +08:00
在显示相同 UUID 不能同时登录的同时,每次登录时返回一个时间戳,只有拥有服务器中记录的最新时间戳的才能够登录。否则当新设备处理,生成新的 UUID 。
Greatshu
2020-11-10 11:45:27 +08:00
@Greatshu #49 显示-->限制
no1xsyzy
2020-11-10 11:48:38 +08:00
@msg7086 MAC 冲突会发生在同一个以太网上吧……
要加路由器的吧
——
我觉得这是个 XY 问题
你先讲清楚为什么要唯一识别码?
就是 Windows10 自动在线授权都只管主板 ID
no1xsyzy
2020-11-10 11:50:00 +08:00
@Greatshu 类似乐观锁么,诶刚才就差一步想到的,冷得想不起来了……
newmlp
2020-11-10 12:20:40 +08:00
tv 是根据网卡 mac 地址生成的
msg7086
2020-11-10 12:33:43 +08:00
@no1xsyzy 啊对,应该是路由器。脑抽了。
fuxiuyin
2020-11-10 12:54:13 +08:00
生成一个塞 TPM 里面存?不过 TPM 也能清空重来。看上去需要标识的不是计算机,是要标识默认的某台计算机,而不管这台计算机是不是唯一的。比如办公室,家总共有 4 台设备,想要的是在其他地方比如地铁上能连上家里 /办公室的某一台机器,而不管这台机器有没有被人换过硬盘 /CPU/内存或者直接换了一台新的是吗?这样看起来应该让用户在新设备上登录的时候给设备取别名比如名字叫"家_卧室_NAS_VM01",然后连接的时候列出来用户所有注册并且现在在线的设备,然后选一个连接。对于 GHOST 和复制的 VM,你们是想免登陆吗?就是说第一台设备已经登陆了 ToDesk,然后做了一个 GHOST 或者 VMware 镜像,复制出来一个出来之后能直接把设备注册上而不用用户进入系统之后重新登录 ToDesk 吗?如果是的话那就客户端上报名称然后服务器发现冲突的名称之后在后面加 01,02,03 ;比如已经登陆了一个 VM 叫"VM",然后复制了 10 个并且都启动起来了,那服务器就给他们叫"VM01","VM02","VM03"...用户连接的时候列表里面显示"VM","VM01","VM02"...
YUCOAT
2020-11-10 13:13:43 +08:00
如果需要严格唯一的话,唯一的办法就是让服务端生成 id 并且存入本地。然后每次启动的时候,去服务端校验一下自己是不是唯一,如果是唯一就把时间存本地,并且今日内启动都不再校验。如果不唯一就让服务单重新分配一个 id 并存入本地。
UN2758
2020-11-10 13:55:55 +08:00
要绝对唯一,首先得假设客户端不可信,那么验证工作全在服务端完成,前面大佬提到服务端发凭证,每次做冲突检测挺好的
FaiChou
2020-11-10 15:28:48 +08:00
Sip(macOS 上取色工具)的作者是这么给我回复的:

```
Hey,

I can give you a light how this works

1) We use the kIOPlatformSerialNumberKey, basically this identifies a machine, the only way the user change this is by changing the board
2) We made some changes to this serial number, basically using some function in CryptoKit and some private keys
3) Then we save that transformed and some data locally and remote
4) Everytime a user open Sip, sip try validate that data, a check if the hash saved locally is different in the server, if that’s different, that means something changed in local, so we delete everything and the user need to start again, will need to enter the license, like you deleted the app
5) We have some algorithms to handle some edge cases, like what if the user dent have internet, what if sip servers are down etc

Hope this helps you
```

希望能帮到你
PUBG98k
2020-11-10 15:46:06 +08:00
@fuxiuyin
@Greatshu
@laminux29
许多情况下用户并不登录.但是也要保证 ID 不同,而且不变.以便于别人随时可以控制.即便重启系统.
ID 也不能变.
PUBG98k
2020-11-10 16:05:07 +08:00
@zouri 不能重新下发一个.因为考虑到这种场景..
我无人值守的设备,安装好了,我记录下来了我的 id.
我就离开了,等我需要的时候我直接连我记录的 id.
如果重新下发了,那人家不是又要跑到现场看原因.无法远程连接了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/723357

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX