如题。
在google和baidu搜索了,好像没有相关的资料

解决方案 »

  1.   

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

  2.   

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

  3.   

    在做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。
      

  4.   

    浏览者操作系统的默认语言
    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");
      

  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  
     
      

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   


    怎么用ActiveX解决这个问题?