CNode

nodesj如何获得客户端的mac地址呢?或者说如何区分客户端的唯一性

Hheixiaoshan发布于12 年前最后回复12 年前28 回复24547 浏览0 收藏

请教大神nodejs如何获得客户端的mac地址。 或者说如何区分客户端的唯一性

查看回复

回复 (28)

Y
yorkie#1·12 年前

WAN没办法获取mac地址的(除非客户端自己把mac地址加到http头)

  1. 在http/tcp的交互过程中是通过ip来通讯的,而mac地址是物理层的,每个数据包会先把mac地址解析成ip再发送
  2. 再LAN环境下,可以通过ARP协议来获取,简单的说就是每台计算机都有一个ip到mac的表,如果表里面有就直接返回,如果表里面没有,也只会在LAN环境下发广播来获取数据

你可以在客户端获取mac地址后加在http头里面返回

Y
yorkie#2·12 年前

你可以运行一下arp -a或者看一眼这个https://github.com/bevry/getmac

Y
yorkie#4·12 年前
引用 yorkie你可以运行一下arp a或者看一眼这个https://github.com/bevry/getmac

@heixiaoshan getmac也仅限在客户端通过http传mac地址回去,没有办法直接通过分析socket获取的呢

H
heixiaoshan#5·12 年前
引用 yorkie你可以运行一下arp a或者看一眼这个https://github.com/bevry/getmac

@yorkie 我试了只能获得服务端的mac,无法获取到客户端的MAC。

H
heixiaoshan#6·12 年前
引用 yorkie你可以运行一下arp a或者看一眼这个https://github.com/bevry/getmac

@yorkie 有没有其他方案,其实获取的mac的目的就是为了区分客户端唯一性。

J
jinqiule#7·12 年前

持续关注中,我也想知道怎么获取

H
heixiaoshan#8·12 年前
引用 jinqiule持续关注中,我也想知道怎么获取

@jinqiule 试了网上说的很多方法只能获取到本地的。

W
whatsmynick#9·12 年前
引用 yorkie你可以运行一下arp a或者看一眼这个https://github.com/bevry/getmac

@heixiaoshan 换思路, 客户端mac除了activeX和扩展取不到, 而且就算客户放行兼杀软没做掉你让你取到, 也无法保证唯一性。

E
Emma0809#10·12 年前

获取客户端的socket.id

Y
yorkie#11·12 年前

看来我白说啦,都说了只能获取LAN(局域网)的mac地址,广域网是不能获取的

C
chrome10086#12·12 年前

.yokrie已经说的很清楚了 . 给你一个思路 .如果是你的"客户端"是浏览器的话. 你生成一个唯一的id,保存在cookie,localStorage或sessionStorage之类的地方 . 每次启动都读取一下id .然后干你想干的事 ... ..

H
heixiaoshan#14·12 年前
H
heixiaoshan#15·12 年前
引用 Emma0809获取客户端的socket.id

@Emma0809 socket还没去接触过呢。不过你说的这个ID不会因为每次重启电脑而改变吗?

E
Emma0809#16·12 年前
引用 Emma0809获取客户端的socket.id

@heixiaoshan 如果客户端断开连接,然后再次连接,id是会改变的

H
heixiaoshan#17·12 年前
引用 Emma0809获取客户端的socket.id

@Emma0809 那其实也达不到效果,目标就是为了识别客户端机器。

J
jinqiule#18·12 年前
引用 chrome10086.yokrie已经说的很清楚了 . 给你一个思路 .如果是你的"客户端"是浏览器的话. 你生成一个唯一的id,保存在cookie,localStorage或sessionStorage之类的地...

@chrome10086 目的是确定某一个用户,打开多个界面会有多个用户,不能确定唯一性,有办法确定mac吗 ,或者内网的ip也可以。

T
tolerious#19·12 年前

这个是不是要自己写个C++的扩展了?

H
heixiaoshan#21·12 年前
J
jinqiule#22·12 年前
引用 chrome10086.yokrie已经说的很清楚了 . 给你一个思路 .如果是你的"客户端"是浏览器的话. 你生成一个唯一的id,保存在cookie,localStorage或sessionStorage之类的地...

@heixiaoshan 恩,解决没有 ,我也想知道,我那个 www.buluoquan.com 的“临时”登陆用户,如果是同一局域网内,只能登陆一个,如果另一个登陆就会把前一个挤掉。

T
tolerious#23·12 年前
引用 tolerious这个是不是要自己写个C++的扩展了?

@heixiaoshan 我不敢说是正确的啊,C++里面是可以获取到MAC地址的,然后通过这个C++的扩展,把MAC地址传给node

H
heixiaoshan#24·12 年前
引用 tolerious这个是不是要自己写个C++的扩展了?

@fengxiaolong 如何在客户端运行呢?

B
bnuhero#26·12 年前

说明问题要准确,你在寻找的是浏览器唯一性的解决方案

你可以在Google里搜索:browser fingerprint js,有很多现成的JS库。例如,fingerprintjs

工作原理就是根据每个浏览器的UA字符串、屏幕、语言、安装的插件等信息,计算出当前浏览器的一个唯一的hash值。根据这份报告,准确度达到94%。

这种方法不用在浏览器端存储任何信息,每次需要识别浏览器时,都是实时计算这个hash值。

为了提高准确度,你可以结合在cookie或者localStorage中存储唯一标识的方法,提高识别度。

H
hc2014#27·12 年前

不知道楼主找到好的解决方案没有,我这里也需要做客户端电脑登陆的判断,如果找到了好的解决方案 就共享下呗

参与回复
登录后即可参与回复。登录