实现获取客户端的MAC地址(1)

为了获取台干宿舍各人电脑的MAC地址,考虑到很多台干电脑操作不熟,不方便直接介绍命令,因此我们想用网页的形式提供获取客户端的MAC,然后点击提交,即可提交到服务端的数据库。

网络上最常见的方案是利用JavaScript脚本,其实是利用两个OBJECT,但它的缺点是:客户机的IE安全属性中必须把“对没有标记为安全的 ActiveX 控件进行初始化和脚本运行”设置为“启用”。这个操作不仅复杂,而且客户端的安全性也降低。代码的缺点还有:存在event、for等关键字,这不是XHTML的标准
以下是该方案的主要代码:
  <script language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)"
    for="foo" type="text/javascript">
    document.forms[0].TxtRR.value=unescape(sALL);
  </script>

  <script language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo"
    type="text/javascript">
   if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
   {
     sALL += objObject.DNSHostName;
     sALL += "\t" + objObject.IPAddress(0);
     sALL += "\t" + objObject.MACAddress;
     sALL += "\t" + objObject.Description;
     sALL += "\r\n";
   } 
  </script>

  <object id="locator" classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6">
  </object>
  <object id="foo" classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223">
  </object>

  <script language="JScript" type="text/javascript">
    var service = locator.ConnectServer();
    var sALL = "";
    service.Security_.ImpersonationLevel = 3;
    service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
  </script>
还有一种是在服务端执行DOS命令NBTSTAT,但它的局限性过大,基本只针对局域网内才能成功,一遇到防火墙就失效了。在我这次的任务中没有作用,所以没有去测试。


第二种方案,客户端执行DOS命令IPCONFIG,生成的信息上传到服务端
执行DOS命令只要如下代码即可:
  WshShell = new ActiveXObject("Wscript.Shell")
  WshShell.Run ("cmd.exe /c ipconfig /all >c:\\1.txt")
但想把c:\1.txt传上来就遇到问题,网页的input file控件一定要用户选择文件后才能上传。而我却是固定某个文件却不行。
上传文件根本不需要代码:客户端如下:
  <form id="form1" method="post" enctype="multipart/form-data" runat="server">
    <input id="File1" type="file" runat="server" /><br />
    <input type="submit" id="ButUp" value="上传" />
  </form>
服务端如下:
  if (this.IsPostBack)
  {
    if (File1.PostedFile.ContentLength != 0)
    {
      File1.PostedFile.SaveAs("C:\\Inetpub\\wwwroot\\Get\\FJ\\a.txt");
    }
  }
后来,想把C:\1.txt读到文本框来,再传上来
  var ForReading = 1;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  ts = fso.OpenTextFile("c:\\1.txt", ForReading);
  document.getElementById("txt1").value = ts.ReadAll().replace(/\r\n/g, "");
这里又有一个ActiveXObject,如果前面的Wscript能过,这边也一定能过。

原文地址:https://www.cnblogs.com/yzx99/p/1385544.html