118

我知道我们可以通过 IE(ActiveX 对象)获取用户的 MAC 地址。

有没有办法使用 JavaScript 获取用户的 MAC 地址?

4

7 回答 7

70

我同意所有先前的答案,如果您能够直接从 Javascript 执行此操作,这将是一个隐私/安全漏洞。我能想到的有两点:

  • 使用 Java(带有签名的小程序)
  • 使用签名的 Javascript,在 FF(和一般的 Mozilla)中获得比普通 JS 更高的权限(但设置起来相当复杂)
于 2008-08-14T06:21:12.150 回答
64

快速而简单的答案是否定的。

Javascript 是一种高级语言,无法访问此类信息。

于 2008-08-06T13:45:00.707 回答
39

不,您无法在 JavaScript 中获取 MAC 地址,主要是因为 MAC 地址唯一标识了正在运行的计算机,因此这将是一个安全漏洞。

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

如果您确实需要知道计算机的 MAC 地址并且您正在为内部应用程序开发,那么我建议您使用外部组件来做到这一点:IE 的 ActiveX,Firefox 的 XPCOM(作为扩展安装)。

于 2008-08-11T16:34:49.840 回答
7

如果这是针对 Intranet 应用程序并且所有客户端都使用 DHCP,则可以向 DHCP 服务器查询给定 IP 地址的 MAC 地址。

于 2008-08-06T13:51:52.267 回答
7

没有。ActiveX 能做到这一点的原因是 ActiveX 是一个运行在客户端机器上的小应用程序。

我想通过 JavaScript 访问这些信息将是一个安全漏洞。

于 2008-08-06T15:38:50.897 回答
5

我正在寻找同样的问题并偶然发现了以下代码。

如何获取客户端 MAC 地址(Web):

要获取客户端 MAC 地址,我们只能依靠 Microsoft 的 JavaScript 和 Active X 控件。只有在 IE 启用 Active X 时才能在 IE 中工作。由于 ActiveXObject 在 Firefox 中不可用,因此无法在 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>

于 2018-01-05T11:22:54.310 回答
-2

不,您不能以另一种方式使用 JavaScript 获取用户的 MAC 地址,只需在 IE 浏览器中使用 Microsoft 的 Active X op

于 2022-01-31T14:20:41.403 回答