JavaScript 中的 MAC 地址

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

Is there a way to obtain a user's MAC address using JavaScript?

238859 次浏览

The quick and simple answer is No.

Javascript 是一种相当高级的语言,它不能访问这类信息。

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

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

I would imagine access to such information via JavaScript would be a security vulnerability.

不,你不能得到的 MAC 地址在 JavaScript 中,主要是因为 MAC 地址唯一标识运行的计算机,所以它将是一个安全漏洞。

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

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

我同意以前的所有答案,如果你能够直接从 Javascript 做到这一点,它将是一个隐私/安全漏洞。我能想到两件事:

  • 使用 Java (带有签名的 applet)
  • 使用带签名的 Javascript,在 FF (以及一般的 Mozilla)中,它比普通的 JS 获得更高的特权(但是设置起来相当复杂)

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

How to get Client MAC address(Web):

要获得客户端的 MAC 地址,只能依靠微软的 JavaScript 和 ActiveX 控件。只有当 ActiveX 支持 IE 时,才能在 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>

不,你不能使用 JavaScript 以另一种方式获得用户的 MAC 地址,只能通过在 IE 浏览器中为微软使用活动 X 操作

我知道我来晚了。尽管答案仍然是否定的。我找到了一种方法来生成和存储一个唯一的 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- Using cookies, you can store this id in a cookie.

3-LocalStorage 是你的朋友。在 LocalStorage 存储相同的 id,并且很有可能,你总是可以看到这个 id。

使用存储在 LocalStorage 中的 id,您的用户可以删除 cookies,并且您仍然能够通过这个 id 识别老访问者。

If the user deletes all their data, then you're SOL and start all over again when they revisit.

玩得开心