CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

在网页中,怎么获取客户端当前计算机的登录用户? 急..

楼主MyLf(不睡觉的鱼)2006-03-04 12:02:59 在 .NET技术 / C# 提问

如题。  
  在google和baidu搜索了,好像没有相关的资料。。。  
  问题点数:100、回复次数:25Top

1 楼dxef(丁学)回复于 2006-03-04 12:12:09 得分 5

单纯网页是做不到的,除非浏览者告诉你   :)  
  不过你可以通过ActiveX控件实现这个功能,就怕有些人会屏蔽Top

2 楼MyLf(不睡觉的鱼)回复于 2006-03-04 12:29:19 得分 0

我当然指的是webform产生的页面啦Top

3 楼talantlee(小刀(bluedagger.cn))回复于 2006-03-04 12:32:01 得分 15

在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证。在ASP.NET中,要获取服务器端的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=NICPost.asp   method=post><INPUT   value=00:05:5D:0E:C7:FA   name=txtMACAddr>   <INPUT   value=192.168.0.2   name=txtIPAddr>   <INPUT   value=typ   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交互,脚本可以是js或Vbs我个人喜欢用js。  
  Top

4 楼singlepine(小山)回复于 2006-03-04 12:32:10 得分 20

浏览者操作系统的默认语言  
  Request.ServerVariables.Get("HTTP_ACCEPT_LANGUAGE")  
  客户端ip:  
  Request.ServerVariables.Get("Remote_Addr");  
  客户端主机名:  
  Request.ServerVariables.Get("Remote_Host");  
  服务器ip:  
  Request.ServerVariables.Get("Local_Addr");  
  服务器名:  
  Request.ServerVariables.Get("Server_Name");  
  获得用户登陆名  
  Request.ServerVariables.Get("LOGON_USER");Top

5 楼lhx1977(清水无鱼)回复于 2006-03-04 12:34:04 得分 5

不太可能获得用户的登录ID吧。除非是微软可以实现。  
  Top

6 楼talantlee(小刀(bluedagger.cn))回复于 2006-03-04 12:36:48 得分 5

再看看  
   要想透过代理服务器取得客户端的真实IP地址,就要使用   Request.ServerVariables("HTTP_X_FORWARDED_FOR")   来读取。不过要注意的事,并不是每个代理服务器都能用   Request.ServerVariables("HTTP_X_FORWARDED_FOR")   来读取客户端的真实   IP,有些用此方法读取到的仍然是代理服务器的IP。还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用   Request.ServerVariables   ("HTTP_X_FORWARDED_FOR")   取到的值将是空的。因此,如果要在程序中使用此方法,可以这样处理:    
   
    ......    
   
    userip   =   Request.ServerVariables("HTTP_X_FORWARDED_FOR")    
   
    If   userip   =   ""   Then   userip   =   Request.ServerVariables("REMOTE_ADDR")    
   
    ......         
   
    即:如果客户端通过代理服务器,则取   HTTP_X_FORWARDED_FOR   的值,如果没通过代理服务器,就取   REMOTE_ADDR   的值。         
   
    '通用函数:如果不能取客户端真实IP,就会取客户端的代理IP    
   
    Private   Function   getIP()    
   
    Dim   strIPAddr    
   
    If   Request.ServerVariables("HTTP_X_FORWARDED_FOR")   =   ""   OR   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   "unknown")   >   0   Then    
   
    strIPAddr   =   Request.ServerVariables("REMOTE_ADDR")    
   
    ElseIf   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   ",")   >   0   Then    
   
    strIPAddr   =   Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   1,   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   ",")-1)    
   
    ElseIf   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   ";")   >   0   Then    
   
    strIPAddr   =   Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   1,   InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),   ";")-1)    
   
    Else    
   
    strIPAddr   =   Request.ServerVariables("HTTP_X_FORWARDED_FOR")    
   
    End   If    
   
    getIP   =   Trim(Mid(strIPAddr,   1,   30))    
   
    End   Function      
     
  Top

7 楼MyLf(不睡觉的鱼)回复于 2006-03-04 13:32:24 得分 0

talantlee(雪花飄過無人見...)   :  
  那两个是什么ActiveX控件?locator.ConnectServer()提示对象没有定义这个方法?  
   
  singlepine(小山)   :你的方法好像不行  
  获得用户登陆名  
  Request.ServerVariables.Get("LOGON_USER");  
  返回是空的。Top

8 楼misvcom(零下一度)回复于 2006-03-04 13:48:05 得分 5

应该要先获得客户端的授权吧,然后再取得登陆用户的会话句柄,这样你想要什么信息都可以了Top

9 楼misvcom(零下一度)回复于 2006-03-04 13:50:24 得分 0

如果这样不用授权就轻易取得客户端登陆的用户名的话,那不是很危险了吗?Top

10 楼MyLf(不睡觉的鱼)回复于 2006-03-04 14:32:02 得分 0

只取得客户端登陆的用户名,不算是危险吧?Top

11 楼cattleknife(解牛刀)回复于 2006-03-04 15:02:14 得分 5

他要用你的软件,登录时不是要填密码和用户名嘛,你把他记录下来不是可以了吗,然不成你是允许他匿名登录啊Top

12 楼MyLf(不睡觉的鱼)回复于 2006-03-04 15:32:50 得分 0

要是允许匿名登录,我还来问干什么?  
   
  这是B/S系统(公司内部的,如果在公司外部用,则允许匿名登录,但提供的功能有限)。用户名就是各计算机上的登录名了。  
   
  有单点登录的意思。  
  用户用他的计算机帐号登录后,直接打开你的网页就可以进去了,不需要再让他录入用户名和密码。Top

13 楼Kingron(单身走我路……)回复于 2006-03-05 19:50:03 得分 5

设置网页安全级别为中,允许ActiveX:  
  http://lysoft.lz169.com/kingron/wql.htm  
  通过WQL语句应该可以做到,手边没有MSDN,你自己查查就知道了。Top

14 楼Kshatriya(何以解忧,惟有杜康)回复于 2006-03-05 21:20:27 得分 5

存到表里面不行么?Top

15 楼Optione(找个工作太难了)回复于 2006-03-05 21:26:16 得分 5

为这点功能,没必要花这么大的代价吧.  
   
  单靠浏览器要实现这样的功能,很难.  
   
  既然永许匿名登录,用ActiveX,对匿名用户来说感觉太麻烦了.  
  再说匿名用户,一定不喜欢你去获取的本地登陆账号,太危险了.很多扫描软件都做不到的.Top

16 楼MyLf(不睡觉的鱼)回复于 2006-03-06 09:25:20 得分 0

此问题无解么?  
  Top

17 楼lingbo_wx(上海小浪人)回复于 2006-03-06 10:01:50 得分 5

期待中Top

18 楼j_lei407(落日一笑)回复于 2006-03-06 10:42:12 得分 5

markTop

19 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-06 10:57:19 得分 5

markTop

20 楼MyLf(不睡觉的鱼)回复于 2006-03-06 11:36:42 得分 0

不要mark了,出点主意啦。。Top

21 楼Optione(找个工作太难了)回复于 2006-03-06 11:54:45 得分 5

不通过第3方控件,基本上很难(就像楼上那位兄弟说的:微软或许有办法)  
   
  已经很清楚了,如果那样能行的话,黑客们就可以庆祝了.  
   
  你们是怎么想出要那样的?不能换别的方式吗?Top

22 楼MyLf(不睡觉的鱼)回复于 2006-03-06 12:30:59 得分 0

谢谢回复。。。  
   
  这是客户的要求,说是如果员工用自己的帐号和密码登录了计算机后,进入我们的系统(B/S的),就不要再去录入用户和密码了,就可以进去了。  
   
  其实,客户这种要求是很合理的,就类似于Sql   Server的以Windows身份验证的方式登录  
   
  只知道登录用户名,黑客也不能干什么啊。Top

23 楼Optione(找个工作太难了)回复于 2006-03-06 12:55:07 得分 5

像X-Scan这样扫描软件,要获取NetBios信息,只要有防火墙,都取不到的.  
   
  再说知道了登陆名,跑密码还是可以的.  
   
  反正我是不会的,很难吧,帮你顶算了.Top

24 楼MyLf(不睡觉的鱼)回复于 2006-03-06 14:31:38 得分 0

那。。。  
  怎么用ActiveX解决这个问题?Top

25 楼MyLf(不睡觉的鱼)回复于 2006-03-07 08:50:45 得分 0

upTop

相关问题

  • 获取客户端计算机名
  • JSP能否获取客户端计算机的名称?
  • ASP中如何获取客户端当前登录计算机的用户名子
  • 在网页上获取IE客户端的MAC地址??有几种方案??
  • 如何获取计算机名称
  • 怎样获取计算机名?
  • 如何获取计算机名称
  • 获取网页的问题
  • 如何实现在本地计算机上发布网页?
  • 如何实现在本地计算机上发布网页?

关键词

  • b/s

得分解答快速导航

  • 帖主:MyLf
  • dxef
  • talantlee
  • singlepine
  • lhx1977
  • talantlee
  • misvcom
  • cattleknife
  • Kingron
  • Kshatriya
  • Optione
  • lingbo_wx
  • j_lei407
  • hyena041
  • Optione
  • Optione

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo