请教大神nodejs如何获得客户端的mac地址。 或者说如何区分客户端的唯一性
WAN没办法获取mac地址的(除非客户端自己把mac地址加到http头)
- 在http/tcp的交互过程中是通过ip来通讯的,而mac地址是物理层的,每个数据包会先把mac地址解析成ip再发送
- 再LAN环境下,可以通过ARP协议来获取,简单的说就是每台计算机都有一个ip到mac的表,如果表里面有就直接返回,如果表里面没有,也只会在LAN环境下发广播来获取数据
你可以在客户端获取mac地址后加在http头里面返回
你可以运行一下arp -a
或者看一眼这个https://github.com/bevry/getmac
@yorkie 非常感谢。我试试看
@heixiaoshan getmac也仅限在客户端通过http传mac地址回去,没有办法直接通过分析socket获取的呢
@yorkie 我试了只能获得服务端的mac,无法获取到客户端的MAC。
@yorkie 有没有其他方案,其实获取的mac的目的就是为了区分客户端唯一性。
持续关注中,我也想知道怎么获取
@jinqiule 试了网上说的很多方法只能获取到本地的。
@heixiaoshan 换思路, 客户端mac除了activeX和扩展取不到, 而且就算客户放行兼杀软没做掉你让你取到, 也无法保证唯一性。
看来我白说啦,都说了只能获取LAN(局域网)的mac地址,广域网是不能获取的
.yokrie已经说的很清楚了 . 给你一个思路 .如果是你的"客户端"是浏览器的话. 你生成一个唯一的id,保存在cookie,localStorage或sessionStorage之类的地方 . 每次启动都读取一下id .然后干你想干的事 … …
@yorkie 回答的很详细很好
@yorkie 不好意思。哈哈。之前看的不是很仔细。
@Emma0809 socket还没去接触过呢。不过你说的这个ID不会因为每次重启电脑而改变吗?
@heixiaoshan 如果客户端断开连接,然后再次连接,id是会改变的
@Emma0809 那其实也达不到效果,目标就是为了识别客户端机器。
@chrome10086 目的是确定某一个用户,打开多个界面会有多个用户,不能确定唯一性,有办法确定mac吗 ,或者内网的ip也可以。
这个是不是要自己写个C++的扩展了?
@jinqiule 目的是为了确认客户端唯一性,换句话说就是确认客户是不是用这一台PC在登陆。
@fengxiaolong 怎么讲?
@heixiaoshan 恩,解决没有 ,我也想知道,我那个 www.buluoquan.com 的“临时”登陆用户,如果是同一局域网内,只能登陆一个,如果另一个登陆就会把前一个挤掉。
@heixiaoshan 我不敢说是正确的啊,C++里面是可以获取到MAC地址的,然后通过这个C++的扩展,把MAC地址传给node
@fengxiaolong 如何在客户端运行呢?
@jinqiule 没有呢、没找到好的方案
说明问题要准确,你在寻找的是浏览器唯一性的解决方案。
你可以在Google里搜索:browser fingerprint js
,有很多现成的JS库。例如,fingerprintjs
工作原理就是根据每个浏览器的UA字符串、屏幕、语言、安装的插件等信息,计算出当前浏览器的一个唯一的hash值。根据这份报告,准确度达到94%。
这种方法不用在浏览器端存储任何信息,每次需要识别浏览器时,都是实时计算这个hash值。
为了提高准确度,你可以结合在cookie或者localStorage中存储唯一标识的方法,提高识别度。
不知道楼主找到好的解决方案没有,我这里也需要做客户端电脑登陆的判断,如果找到了好的解决方案 就共享下呗
@hc2014 暂时还没有呢