我有一种使用ActiveX获取客户端MAC地址和其他信息的方法(代码如下所示)。但我只想在Global.asax页面的Session_OnStart()事件中使用MAC地址值并写入文本文件。那我怎么能这样做呢?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script id="clientEventHandlersJS" type="text/javascript">
function btnGo_onClick() {
var macAddress;
// Connect to WMI
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
// Get the info
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
var e = new Enumerator(properties);
// Output info
document.write("<table border=1>");
document.write("<thead>");
document.write("<td>Caption</td>");
document.write("<td>MAC Address</td>");
document.write("</thead>");
for (; !e.atEnd(); e.moveNext()) {
var p = e.item();
document.write("<tr>");
document.write("<td>" + p.Caption + "</td>");
document.write("<td>" + p.MACAddress + "</td>");
document.write("</tr>");
}
document.write("</table>");
}
</script>
</head>
<body>
<h1>MAC Address</h1>
<input id="btnGo" name="btnGo" value="Go" onclick="javascript:btnGo_onClick()" type="button">
</body>
答案 0 :(得分:1)
我们的想法是将您的客户端数据发送回服务器。你可以在拥有它时使用ajax调用,或者只是创建一个img文件名,通过我在此演示的参数。
在服务器端创建处理程序,例如logmac.ashx
并在您的代码中添加此javascript脚本部分:
document.write('<img src="logmac.ashx?cap=' + escape(p.Caption) + '&mac=' + escape(p.MACAddress) +'" width="1" height="1">');
或者只是将其呈现在页面的某个位置,以便渲染类似
的行<img src="logmac.ashx?cap=99283&mac=22:22:22:22" width="1" height="1">
甚至可以更好地制作出Royi在评论中建议的动态图像
<script>
var img = new Image();
img.src = 'logmac.ashx?cap=' + escape(p.Caption) + '&mac=' + escape(p.MACAddress) ;
</script>
此图像调用将调用您的处理程序,并在那里保存此信息。你的处理程序就像
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest (HttpContext context)
{
// read here the url parameters, and save them
context.Request["cap"].ToString();
context.Request["mac"].ToString();
// send the image
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
这个想法类似于那个:ASP server stats for html pages
如果失败,那么下一个解决方案是进行ajax调用,或以编程方式更改图像元素上的src。