JavaScript中的MAC地址

123
我知道我们可以通过IE(ActiveX对象)获取用户的MAC地址。
是否有一种使用JavaScript获取用户的MAC地址的方法?
8个回答

73

我同意之前所有回答的观点,如果您可以直接从JavaScript中执行此操作,那么这将是一个隐私/安全漏洞。有两件事情我可以想到:

  • 使用Java(带有签名小程序)
  • 使用带有签名的JavaScript,在FF(和Mozilla一般)中获得比普通JS更高的权限(但设置相当复杂)

7
我很好奇是否可以通过JavaScript获取用户的唯一信息,例如MAC地址、序列号或类似的内容?还有PC的名称? - Flamur Beqiraj

69

简短而明确的回答是不行。

Javascript 是一种相当高级的编程语言,无法访问这种类型的信息。


1
那么,所有提供获取MAC地址示例代码的谷歌搜索结果怎么办? - Moon
15
我查了一下谷歌,阅读的所有页面都是只能在IE浏览器上使用ActiveX对象的解决方法。如果您可以发布一个展示不同解决方案的链接... - GateKiller
39
我认为“高级语言”和MAC地址没有任何关系,因为任何服务器端编程语言都允许您访问ARP表,即使是间接地(例如通过子进程)。我认为“客户端语言”更合适... - kirbyfan64sos
8
高级语言没有理由不能访问低级硬件信息。但在这种情况下,这并不会发生,因为这将成为一个安全问题。 - nsn

41

无法使用JavaScript获取MAC地址,因为MAC地址可以唯一识别运行的计算机,这将导致安全漏洞。

如果您只需要一个唯一标识符,我建议您使用某些加密算法自己创建一个并将其存储在cookie中。

如果您真的需要知道计算机的MAC地址,并且正在开发内部应用程序,则建议您使用外部组件:对于IE,使用ActiveX;对于Firefox,使用XPCOM(作为扩展安装)。


你知道Safari的外部组件吗? - user656925
不,我实际上是建议创建一个。 - Vincent Robert
你建议如何创建唯一标识符?如何使用加密算法来保证每个在其计算机上运行它的用户都获得唯一的ID? - Michael
3
维基百科列出了几种UUID实现。 - Vincent Robert

7
如果这是针对内部网络应用程序,并且所有客户端都使用DHCP,您可以查询DHCP服务器以获取给定IP地址的MAC地址。

7

不行。ActiveX 之所以能够做到这一点,是因为 ActiveX 是在客户端机器上运行的小型应用程序。

我认为通过 JavaScript 访问此类信息将会存在安全漏洞。


5
我正在寻找同样的问题,并偶然发现了以下代码。
如何获取客户端MAC地址(Web):
要获取客户端MAC地址,我们唯一可以依靠的是JavaScript和Microsoft的Active X控件。只有在IE启用Active X时才能工作。由于Firefox不支持ActiveXObject,因此它无法在Firefox中运行,但在IE中运行良好。
此脚本仅适用于IE:

function showMacAddress() {
    var obj = new ActiveXObject("WbemScripting.SWbemLocator");
    var s = obj.ConnectServer(".");
    var properties = s.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
    var e = new Enumerator(properties);
    var output;
    output = '<table border="0" cellPadding="5px" cellSpacing="1px" bgColor="#CCCCCC">';
    output = output + '<tr bgColor="#EAEAEA"><td>Caption</td><td>MACAddress</td></tr>';
    while (!e.atEnd()) {
        e.moveNext();
        var p = e.item();
        if (!p) continue;
        output = output + '<tr bgColor="#FFFFFF">';
        output = output + '<td>' + p.Caption; +'</td>';
        output = output + '<td>' + p.MACAddress + '</td>';
        output = output + '</tr>';
    }
    output = output + '</table>';
    document.getElementById("box").innerHTML = output;
}

showMacAddress();
<div id='box'></div>


1

我知道我来晚了。虽然答案仍然是否定的,但我找到了一种方法来生成和存储一个唯一的ID,以帮助跟踪用户在网站上的浏览。

当用户注册时,我就有了他在注册之前访问过哪些页面的完整记录。我还将此ID存储在用户表中,以供历史参考。

这也很方便,当你正在寻找可疑活动时。例如,创建了多个账户的用户。我应该指出,这是在一个金融交易网站上,数据仅用于内部使用。它确实有助于减少欺诈和重复账户。使用localStorage和这种方法可以做很多事情,但为了不给任何人带来恶意想法,我会保持简短。

1- 生成一个随机字符串。如果您生成一个40个字符的字符串,您不必太担心它们会发生冲突。我们并不是要把火箭送到火星。

我使用一个小的PHP函数来生成一个40个字符的字符串。我使用Ajax调用此函数并检索结果。

    function genrandstr($length=NULL) {
        if($length == NULL){ $length = 30; }
        $characters = 
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
        return $randomString;
    }

    localStorage.setItem('id', id) to add to localStorage
    (let) or (var) id = localStorage.getItem('id') to read from localStorage

2- 使用cookies,您可以将此id存储在cookie中。

3- LocalStorage是您的好朋友。在LocalStorage中存储相同的id,很有可能您将始终拥有该id以供查看。

使用在LocalStorage中存储的id,即使用户删除了cookies,您仍然能够通过此id识别旧访问者。

如果用户删除了所有数据,则您需要重新开始当他们再次访问时。

玩得开心!


浏览器指纹识别比...更好。 - Lk77
也许可以给我们这些不太了解的人举个例子,说明一下如何进行浏览器指纹识别呢?你的回答缺乏任何信息。 - hasherfer

-3

不,你不能通过JavaScript以其他方式获取用户的MAC地址,只能在IE浏览器中使用Microsoft的Active X操作。


2
这在许多其他答案中已经提到了。 - Eric Aya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接