zoukankan      html  css  js  c++  java
  • 实现获取客户端的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能过,这边也一定能过。

  • 相关阅读:
    Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition
    Java并发--Java线程面试题 Top 50
    Java并发--Timer和TimerTask
    Spring配置--Aop配置详情
    Spring配置--tx事务配置方式
    java并发--Callable、Future和FutureTask
    java并发--CountDownLatch、CyclicBarrier和Semaphore
    精通Matlab数字图像处理与识别
    油砂资源状况与储量评估方法
    家庭自制药蛋
  • 原文地址:https://www.cnblogs.com/yzx99/p/1385544.html
Copyright © 2011-2022 走看看