在 JavaScript 中获取 Mac 地址

Tahseen Tauseef 2023年1月30日
  1. MAC 地址
  2. MAC 地址格式
  3. 在 JavaScript 中使用 ActiveX 对象获取 MAC 地址
在 JavaScript 中获取 Mac 地址

为了将数据从一台计算机传送到另一台计算机,我们需要一些地址。在计算机网络中,引入了各种地址,每个地址都在不同的层上工作。

例如,媒体访问控制地址是在数据链路层工作的物理地址。本文将讨论 DLL 中的寻址,即 MAC 地址,并演示如何使用 JavaScript 获取用户的 MAC 地址。

MAC 地址

MAC(媒体访问控制)是分配给网络接口控制器的 48 位唯一标识符。它是与每个网络设备相关联的物理地址。

数据链路层使用 MAC 地址将数据包从源路由到其目的地。它在 IEEE 802 标准中分为两个子层:

  1. 逻辑链路控制 (LLC) 子层
  2. 媒体访问控制 (MAC) 子层

由于存在数以百万计的网络设备,我们需要唯一地识别每一个设备,因此 MAC 地址在全球范围内都是唯一的。

MAC 地址格式

MAC 地址是 12 位十六进制数(6 字节二进制数),通常以冒号-十六进制表示法书写。OUI(组织唯一标识符*)是 MAC 地址的前 6 位数字(例如,00:40:96)。

IEEE 注册机构委员会将这些 MAC 前缀分配给其注册供应商。以下是一些知名厂商的 OUI:

CC:46:D6 - Cisco
3C:5A:B4 - Google, Inc.
3C:D9:2B - Hewlett Packard
00:9A:CD - HUAWEI TECHNOLOGIES CO.,LTD

制造商将最右边的六位数字分配给网络接口控制器。

如上所述,MAC 地址是用冒号-十六进制格式编写的,但这只是一种转换,并不是必需的。以下任何一种格式都可用于表示 MAC 地址:

MAC 地址格式

在 JavaScript 中使用 ActiveX 对象获取 MAC 地址

我们只能使用 Microsoft 的 ActiveX 对象控件在 JavaScript 中获取用户的 MAC 地址。它只能在 Internet Explorer 上工作,因为 ActiveX 对象在任何其他浏览器中都不可用。

要启用 ActiveX 对象,我们将转到工具并选择 Internet 选项。然后在安全标签页上,我们将单击自定义级别。

我们将继续下去,直到我们看到 Initialize 和脚本 ActiveX 控件未标记为安全。我们将启用它,然后单击确定。

<script type="text/javascript">
    var macAddress = "";
    var computerName = "";
    var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}");
    e = new Enumerator(wmi.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"));
    for(; !e.atEnd(); e.moveNext()) {
        var s = e.item();
        macAddress = s.MACAddress;
        computerName = s.DNSHostName;
    }
</script>

现在,我们进入编码部分。我们可以将上面的代码添加到 HTML 头部或主体的任何位置,但如果我们选择将其放在主体中,请将其放在下面的代码上方。

在这里,我们将访问 Win32_NetworkAdapterConfiguration 以读取与网络相关的详细信息,例如 MAC 地址、IP 地址和计算机名称。然后,我们可以使用文本框来显示该信息或我们喜欢的任何内容。

<script type="text/javascript">
<input type="text" id="txtMACAdress" />
<input type="text" id="txtComputerName" />

<script type="text/javascript">
    document.getElementById("txtMACAdress").value = unescape(macAddress);
    document.getElementById("txtComputerName").value = unescape(computerName);
</script>

我们必须确保将声明放在此代码上方以正确显示值。现在,客户端可以看到他们的 MAC 地址显示在屏幕上。

你可以在此链接中找到此问题的完整代码。我们还在下面提供了屏幕截图。

使用 ActiveX 对象获取 MAC 地址

由于明显的原因,此屏幕截图上的输出已被模糊。