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

11

我有以下问题: 我有一个在路由器后面的web服务器。问题是,我需要客户端打开服务器网站的MAC地址以供进一步使用。我已经尝试通过ActiveX对象获取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上使用。感谢您的帮助。

敬礼, Chris


为什么你需要知道MAC地址? - kuba
因为我想通过SNMP向托管交换机发送请求,以获取客户端连接的端口。我的公司正在制作一款设施管理软件,通过MAC地址,我们可以找出客户端所在的房间。在确定了客户端所在的房间后,我们会显示一个网站来控制实际的房间。您可以通过“房间管理网站”发送命令来控制室内百叶窗、设置房间温度或打开窗户。 - chris6523
2
你找到这个问题的解决方案了吗?我也在尝试做同样的事情。 - Alex
你找到解决方案了吗?我也在尝试同样的事情。 - Irfan Nasim
不,实际上我们找不到任何方法来获取MAC地址。 - chris6523
有什么解决办法吗?我现在也在尝试同样的问题,如果有人对这种情况有解决方案,请分享。 - Vinoth Kumar
2个回答

7
似乎可以使用Java Applet来实现此功能,请参阅https://forums.oracle.com/forums/thread.jspa?threadID=1144276http://techdetails.agwego.com/2008/02/11/37/
不确定是否需要用户同意安全警告,我没有尝试过。
可能没有更好的方法了,因为ActiveX仅适用于Windows(仅限IE),而在任何标准HTML或JavaScript中都没有这样的API来获取MAC地址。我不知道Flash能否有用,但我觉得不太可能。
然而,您获取用户MAC地址的原因可能是合理的,但我仍认为推论任何信息并不是一个好主意,因为它可以被欺骗/更改,并且在某些情况下可能无法正确显示。如果您可以提出一个更好的解决方案(不涉及抓取MAC地址),那么您会做得更好。

客户没有权限更改任何系统设置,我们没有其他解决方案来将连接端口解析到房间而不是 MAC 地址... 顺便说一下,我正在尝试使用 Java-Applet,但它并没有真正起作用。它只显示一个空的消息框... :/ - chris6523
1
你的服务器是否在同一子网上?如果是,你可以远程获取MAC地址。如果不是,考虑在每个子网上运行一个代理服务器,以中继此信息。 - kuba
问题在于,网络不是由我们管理的,我们必须定制我们的软件使其正常工作。服务器位于路由器后面,不在同一子网中。由于客户提供的网络安全设置,我们无法设置代理服务器。 - chris6523
我尝试了链接中的Java-Applet,但它不再与最新的Java版本兼容 :( - chris6523

3

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


这听起来像是一个问题,而不是一个答案。请发表一个问题。 - David Makogon
这并没有提供问题的答案。您可以搜索类似的问题,或者参考页面右侧的相关和链接问题来找到答案。如果您有一个相关但不同的问题,请提出新问题,并包含此问题的链接以帮助提供上下文。请参阅:提问,获取答案,无干扰 - Baum mit Augen
3
看起来对我来说是一个答案。作者说他用本地+浏览器解决了这个问题,这是一个解决方案,因此是一个答案。作者指出他们正在研究是否可以仅使用浏览器完成,但这是关于答案范围的澄清,而不是一个新问题。 - Sam Hartman

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