• asp.net获取客户端登录者mac地址


    asp.net获取客户端登录者的mac地址,有两种方法

    1,通过win32特性获得,

            优点:无需在客户端设置;缺点:无法获取服务器的mac(经测试总为0,其实感觉没有必要获取服务器的mac,所以也不算缺点)(能否跨网段获取还没有测试)

    2,通过javascript加载ActiveX来实现:

           优点:任意获取mac地址(可以跨网段获取);缺点:需要在客户端浏览器中将activeX的选项全部打开,否则获取不到,所以不怎么稳定;

    通过win32特性获得:

    代码
     [DllImport("Iphlpapi.dll")] 
          
    private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length); 
          [DllImport(
    "Ws2_32.dll")]
          
    private static extern Int32 inet_addr(string ip);

          
    private void Page_Load(object sender, System.EventArgs e)
          {
               
    try
               {
                    
    string userip=Request.UserHostAddress;
                    
    string strClientIP = Request.UserHostAddress.ToString().Trim();
                    Int32 ldest 
    = inet_addr(strClientIP); //目的地的ip 
                    Int64 macinfo = new Int64(); 
                    Int32 len 
    = 6
                    
    int res = SendARP(ldest,0ref macinfo, ref len);
                    
    string mac_src=macinfo.ToString("X");
                    
    if(mac_src == "0")
                    {
                        
    if (userip == "127.0.0.1")
                        {
                            Response.Write(
    "正在访问Localhost!");
                        }
                        
    else
                        {
                            Response.Write(
    "欢迎来自IP为" + userip + "的朋友!" + "<br>");
                        }
                         
    return;
                    }

                    
    while(mac_src.Length<12)
                    {
                        mac_src 
    = mac_src.Insert(0,"0");
                    }

                    
    string mac_dest="";

                    
    for(int i=0;i<11;i++)
                    {
                         
    if (0 == (i % 2))
                         {
                              
    if ( i == 10 )
                              {
                                    mac_dest 
    = mac_dest.Insert(0,mac_src.Substring(i,2));
                              }
                              
    else
                              {
                                    mac_dest 
    ="-" + mac_dest.Insert(0,mac_src.Substring(i,2));
                              }
                         } 
                    }

                    Response.Write (
    "欢迎来自IP为"+userip+ "<br>" + ",MAC地址为"+mac_dest+"的朋友!" 

                     
    +   "<br>");
               }
               
    catch(Exception err) 
               { 
                    Response.Write(err.Message);
               }
          }

    通过以上代码则可获取客户端mac,需要在客户机子上面才能看到效果

    通过javascript加载ActiveX来实现:

    javascript代码如下

    代码
    // JScript 文件

    document.write(
    "<OBJECT id='locator' classid='CLSID:76A64158-CB41-11D1-8B02-00600806D9B6' VIEWASTEXT></OBJECT>");
    document.write(
    "<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>");
    var MACAddr, IPAddr, sDNSName
    function getObject(objObject,objAsyncContext){
        
    try{
            
    if(MACAddr==null && objObject.IPEnabled)
            {
               
    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;
            }
        }
        
    catch(err)
        {   }
    }
    function setValue(hResult,pErrorObject, pAsyncContext){
        createTxt(
    "txtMAC", MACAddr);
        createTxt(
    "txtIp", IPAddr);
        createTxt(
    "txtPCName", sDNSName);
    }
    function createTxt(txtName, txtValue){
        
    var macTxt = document.createElement("INPUT");
        macTxt.name 
    = txtName;
        macTxt.value 
    = txtValue;
        macTxt.type 
    = "hidden";
        
    try
        {
            document.forms[
    0].appendChild(macTxt);
        }
        
    catch(err)
        {
        
            
    //获取失败
        }
    }

    document.getElementById(
    "foo").attachEvent("OnObjectReady", getObject);
    document.getElementById(
    "foo").attachEvent("OnCompleted", setValue);

    try
    {
        
    var service = locator.ConnectServer();
        
    var MACAddr ;
        
    var IPAddr ;
        
    var DomainAddr;
        
    var sDNSName;
        service.Security_.ImpersonationLevel
    =3;
        service.InstancesOfAsync(foo, 
    'Win32_NetworkAdapterConfiguration'); 
    }
    catch(err)
    {
        
    //获取失败
    }

    在要获取的aspx页面上面引用以上js,可以在该页面通过以下方法来获取max地址

    代码
     /// <summary>
        
    /// 获取mac地址
        
    /// </summary>
        
    /// <returns></returns>
        public string GetMACs()
        {
             
    try
            {
                
    return Request.Form["txtMAC"].ToString();
            }
            
    catch
            {

                
    return "";
            }
        }
  • 相关阅读:
    Flex 和JavaScript 交互(带参)
    dos创建快捷方式
    IE的onunload事件里调用DWR
    使用VS2008开发OPC客户端程序
    实时库GEHistorian的一些问题记录
    SQL SERVER中,把一个表中的数据导入到另一个表中
    SQLSERVER 触发器
    SqlServer数据复制出现的问题与处理
    了解Log.Debug 或 log4net
    VS2008应用程序部署时将Framework3.5打包到安装包中
  • 原文地址:https://www.cnblogs.com/skyshenwei/p/1677123.html
Copyright © 2020-2023  润新知