首页 新闻 会员 周边 捐助

ASP.NET怎样得到客户端MAC地址(请注意是客户端的个人电脑的MAC地址不是服务器端的)

0
[已关闭问题] 关闭于 2012-03-08 11:29

我最近在做一个内部管理系统,现在想要收集一下登录用户的MAC地址、主机名、IP等信息,这样在登录的时候就能验证一下是否是本人登录的。可是在网上查了N久,查到的代码大多数都是获取服务器端的MAC地址,请问园子里面的大牛们有没有什么通用一点的解决办办法啊?

轩辕公子的主页 轩辕公子 | 初学一级 | 园豆:131
提问于:2012-03-07 15:46
< >
分享
所有回答(3)
1

没有办法解决,因为浏览器根本没有把相关信息发给你,巧妇难为无米之炊。你最多只能获取到IP地址。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-07 15:49

那有没有什么替代的办法啊,比如说安装个插件什么的,但是我不会开发插件,真是头疼啊

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-07 16:00

@轩辕公子: 安装插件你就得考虑到浏览器兼容的问题了,代价比较大。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-07 16:17

@水牛刀刀: 这个也是没有办法的办法,我在网上找个好几天了,要么就是只能在IE下获取Windows操作系统的MAC地址,要不就是只能在局域网,所以我想试试在客户端动点脑筋,这样获取的信息还比较正确

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-07 16:56

@轩辕公子: 为什么一定要验证是本人登录?难道没有密码么……如果有密码,他自己密码丢失了,怪谁啊

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-07 17:05
0

用ip和主机名就够了吧

OOLi | 园豆:163 (初学一级) | 2012-03-07 16:04

这个是没办法的事情,领导非要获取mac地址

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-07 16:52
0

在做 B/S 结构的系统时,我们常常需要获取客户端的一些信息,如 IP  MAC ,以结合身份验证。 要获取服务器端的 MAC 很容易,但是要获取客户端的 MAC 的地址确要花费一翻心思,通常的做法是调用 Win32API 或直接调用 nbtstat 命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用 Javascript ,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好。
具体实现的html和javascript如下:

<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
 document.forms[
0].txtMACAddr.value=unescape(MACAddr);
 document.forms[
0].txtIPAddr.value=unescape(IPAddr);
 document.forms[
0].txtDNSName.value=unescape(sDNSName);
 
//document.formbar.submit();
  </SCRIPT>

<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
   
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
   {
    
if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
    MACAddr 
= objObject.MACAddress;
    
if(objObject.IPEnabled && objObject.IPAddress(0!= null && objObject.IPAddress(0!= "undefined")
    IPAddr 
= objObject.IPAddress(0);
    
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
    sDNSName 
= objObject.DNSHostName;
    }
  
</SCRIPT>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
<SCRIPT language=JScript>
   
var service = locator.ConnectServer();
   
var MACAddr ;
   
var IPAddr ;
   
var DomainAddr;
   
var sDNSName;
   service.Security_.ImpersonationLevel
=3;
   service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
   
</SCRIPT>

<FORM id="formfoo" name="formbar" action="index.do" method="post"><INPUT value="00-11-11-B4-52-EF"   name="txtMACAddr"> <INPUT value="210.42.38.50"  name="txtIPAddr"> <INPUT value="zhupan"name="txtDNSName"> </FORM></BODY></HTML>


        其实最关键的还是用到两个ActiveX:
        <OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
        <OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
        不过这两个ActiveX都是系统自带,不用去下载或注册。
        接下来的工作就是用脚本和ActiveX交互

ps:此种方法只能用于IE浏览器

黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-07 16:10

这种方法我试过了,确实在IE下是可以的,但是我想找个通用的,总不能强制所有人都用IE吧,系统刚上线的时候就强制用户使用IE结果找来一片骂声,最后就不赶强制了,我现在就是想找个通用一点的方法

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-07 16:54

@轩辕公子: 哈哈,那你就只能写active插件了

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-07 17:04

@轩辕公子: 还有一个办法就是用cs壳套一下,cs程序能获取到客户端PC配置信息.

然后里面用webbrowser打开你的网站,

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-07 18:00

@轩辕公子: 好像用winapi就可以获取到客户端的PC信息,包括CPUID都可以,其实mac地址是可以软改的,CPUID保险点

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-07 18:01

@黑泡泡: 这个方法倒是可以,但是我做的是bs网站啊,照你那样做的话不就变成CS的了吗?

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-08 11:31

@黑泡泡: 这些信息我倒是想获取,可是在bs模式下用asp.net真的太难了,到目前为止我还么有找到解决的办法,我暂时用的是js获取的,就是你说的那个方法,可是这个设置起来比较麻烦,还会产生安全性问题,我想找一个完美一点的解决方案,难啊

支持(0) 反对(0) 轩辕公子 | 园豆:131 (初学一级) | 2012-03-08 11:33

@轩辕公子: 是的,如果网站都能获取客户端权限,那病毒就不知道猖狂到什么地步了

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-08 11:35

@轩辕公子: 我可以很肯定的告诉你,不可能..其实插件也是客户端程序.只有客户端程序才能获取到这些信息

支持(0) 反对(0) 黑泡泡 | 园豆:222 (菜鸟二级) | 2012-03-08 11:37

@轩辕公子: 哥们,你这个问题后来怎么解决的啊? 我也碰到相同的问题。

支持(0) 反对(0) blue-K2 | 园豆:200 (初学一级) | 2015-06-25 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册