为了获取台干宿舍各人电脑的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能过,这边也一定能过。