使用浏览器获取客户端的 MAC 地址

Posted

技术标签:

【中文标题】使用浏览器获取客户端的 MAC 地址【英文标题】:Getting the MAC-Address of a client with a browser 【发布时间】:2012-05-03 21:09:12 【问题描述】:

我有以下问题: 我有一个网络服务器。该网络服务器位于路由器后面。问题是,我需要在服务器上打开网站以用于进一步目的的客户端的 MAC 地址。我已经尝试通过 ActiveX-Object 获取 MAC 地址,但客户端需要安装 WMI。以下是实际代码:

<!DOCTYPE  html  PUBLIC  "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
        <title></title>
        <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script id="clientEventHandlersJS" language="javascript">

function Button1_onclick() 
  var locator = new ActiveXObject("WbemScripting.SWbemLocator");
  var service = locator.ConnectServer(".");
  var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
  var e = new Enumerator (properties);
  document.write("<table border=1>");
  dispHeading();
  for (;!e.atEnd();e.moveNext ())
  
        var p = e.item ();
        document.write("<tr>");
        document.write("<td>" + p.Caption + "</td>");
        document.write("<td>" + p.IPFilterSecurityEnabled + "</td>");
        document.write("<td>" + p.IPPortSecurityEnabled + "</td>");
        document.write("<td>" + p.IPXAddress + "</td>");
        document.write("<td>" + p.IPXEnabled + "</td>");
        document.write("<td>" + p.IPXNetworkNumber + "</td>");
        document.write("<td>" + p.MACAddress + "</td>");
        document.write("<td>" + p.WINSPrimaryServer + "</td>");
        document.write("<td>" + p.WINSSecondaryServer + "</td>");
        document.write("</tr>");
  
  document.write("</table>");


function dispHeading()

    document.write("<thead>");
    document.write("<td>Caption</td>");
    document.write("<td>IPFilterSecurityEnabled</td>");
    document.write("<td>IPPortSecurityEnabled</td>");
    document.write("<td>IPXAddress</td>");
    document.write("<td>IPXEnabled</td>");
    document.write("<td>IPXNetworkNumber</td>");
    document.write("<td>MACAddress</td>");
    document.write("<td>WINSPrimaryServer</td>");
    document.write("<td>WINSSecondaryServer</td>");
    document.write("</thead>");


        </script>
  </head>
  <body>

        <INPUT id="Button1" type="button" value="Button" name="Button1" language="javascript" onclick="return Button1_onclick()">
  </body>

当您单击该按钮时,它应该返回一个包含网络配置的表格,但这对我不起作用。我想知道,是否有另一种解决方案可以通过浏览器获取客户端的 MAC 地址。我也不想限制在 Internet Explorer 上的使用。提前感谢您的帮助。

问候, 克里斯

【问题讨论】:

为什么需要知道MAC地址? 因为我想通过 SNMP 向托管交换机发送请求以获取客户端的连接端口。我的公司正在制作一个设施管理软件,通过 MAC 地址,我们可以找到客户在哪个房间。在我们找出客户在哪个房间后,我们会显示一个网站来控制实际房间。您可以通过“房间管理网站”向室内百叶窗发送命令、设置室温或打开窗户。 您找到解决方案了吗?我正在尝试做同样的事情 您找到解决方案了吗?我正在尝试做同样的事情。 不,实际上我们根本找不到MAC地址。 【参考方案1】:

在我之前的项目中。我们在浏览器 javascript 中使用 websocket 与在同一台机器上运行的本地代码 C# dll 进行通信。本机代码可以检索任何系统信息、MAC 地址和其他系统信息,如内存、磁盘空间等。Node.js 也可以用来代替 C#,只是为了打破 windows 机器的限制,进入 MAC 机器。使用 install shield 将整个应用程序(chrome 浏览器 + 本机代码)下载到客户端。

【讨论】:

这听起来像是一个问题,而不是一个答案。发布问题。 这并没有提供问题的答案。您可以search for similar questions,或参考页面右侧的相关和链接问题找到答案。如果您有一个相关但不同的问题,ask a new question,并包含指向此问题的链接以帮助提供上下文。见:Ask questions, get answers, no distractions 看起来像是对我的回答。作者说他用native+browser解决了这个问题,这是一个解决方案,因此是一个答案。作者指出,他们正在研究是否可以仅使用浏览器完成,但这是对答案范围的澄清,而不是一个新问题。【参考方案2】:

您似乎可以使用 Java Applet 来执行此操作,请参阅 https://forums.oracle.com/forums/thread.jspa?threadID=1144276 和 http://techdetails.agwego.com/2008/02/11/37/ 的帖子。

不确定是否需要用户同意对此的安全警告,我没有尝试过。

可能没有更好的方法,因为 ActiveX 只能在 Windows(和 IE)上运行,并且没有这样的 API 可以在任何标准 HTML 或 JavaScript 中获取 MAC 地址。我不知道 Flash 对此是否有用,但我对此表示怀疑。

但是,您获取用户 MAC 地址的理由似乎是正确的,但我仍然认为推断它的任何信息都不是一个好主意,因为它可能会被欺骗/更改,并且在某些情况下可能无法正确显示。如果您能为您的问题提出更好的解决方案(不涉及抓取 MAC 地址),您会做得更好。

【讨论】:

客户端无权更改任何系统设置,我们没有其他解决方案可以将连接的端口解析为房间而不是 MAC 地址...顺便说一句,我正在尝试使用Java-Applet,但它并没有真正起作用。它只显示一个空的 MessageBox...:/ 你的服务器在同一个子网上吗?然后,您可以远程获取 MAC 地址。如果没有,如何在每个子网上运行一个代理服务器来传递这些信息? 问题是,网络不是由我们管理的,我们必须定制我们的软件才能使其正常工作。服务器位于路由器后面,而不是在同一个子网中。由于客户提供的网络安全设置,我们无法设置代理服务器。 我从链接中尝试了 Java-Applet,但它不再适用于最新的 Java-Version :(

以上是关于使用浏览器获取客户端的 MAC 地址的主要内容,如果未能解决你的问题,请参考以下文章

怎么通过 JS获取客户端的MAC地址?在验证用户时,需要用到MAC地址和IP地址。

java怎么获取客户端的请求信息

获取客户端的ip地址与mac地址总结

浏览器端获取局域网IP地址,本机的MAC,以及机器名

如何使用 PHP 获取客户端的 MAC 地址?

如何获取客户端的MAC地址