zoukankan      html  css  js  c++  java
  • C# B/S程序如何获取客户端的MAC地址

    我不是提问,而是把自己知道的跟大家一起分享下

    目前百度或者谷歌到的方法有很多,不外乎就总结出来的

    1。调用客户端的WMI读取MAC地址

    2。通过某些网络协议抓取客户端的请求信息获取客户端的MAC地址

    第一种,都是基于ActiveX插件法获取客户端的信息,但是这种因为IE的安全级别问题,是无法做到通用的,包括建行等银行的U盾,网银行支付控件,支付宝控件都是一致的

    他们都是基于ActiveX的插件,从而控制B/S模式下客户端的操作,这些方法在不同浏览器上就会有不同的BUG,所以目前来说支持这些ActiveX插件的就只有IE6,7,但是因为微软的IE浏览器自身的一些缺陷,导致ActiveX插件不稳定,比如说支付宝控件在IE7和IE8下,如果不是信任网站,则会造成IE崩溃,访问带有ActiveX插件的页面,IE就直接崩溃了。

    第二种,只是有人提及HTTP协议是基于请求的,应该不可能取不到

    但是我这个没学过网络协议的人,发现网络协议都是基于硬件的

    如果您的B/S程序不是在路由器上,则是无法解析网络协议,因为HTTP协议里的TCP/IP协议

    突然发现评论里有人提起这篇N年前的文章,好吧我给出答案

    第一种

    是调用WMI服务,获取客户端的MAC地址,其实是将获取的代码编译成为了ActiveX的DLL

    可参考以下文章

    http://blog.163.com/guyywan_1314/blog/static/1288542502011070514680/

    http://www.cnblogs.com/time-is-life/archive/2006/01/11/312509.html

    https://msdn.microsoft.com/zh-cn/library/ms178709%28v=vs.80%29.aspx

    因为技术过于久远,我本人也未真正用到这种方法(因为要过IE的安全设置,必须给微软购买数字签名,没数字签名,在本地的安全级别必须调整到自定义的级别才能调用,某些版本的系统里必须发布到IIS6里)

    第二种

    第二种方法是一种通用的较多方法,

    就是通过客户端在浏览器发起的请求操作(post/get)从而在服务端获取到这个通讯过程中的客户端ip地址

    string ip =System.Web.HttpContext.Current.Request.UserHostAddress;
        或 string ip =System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

    具体内容我就不详述了

    因为博客园里有很多这样的文章

    http://www.cnblogs.com/yejun/archive/2008/02/26/1082485.html

    http://www.cnblogs.com/huacw/archive/2012/03/15/2398524.html

    再贴一段我也不知道从哪里COPY来的代码

    以供各位看官参考,放的位置可考虑放在Global或者需要下面这段代码的文件里

             /// <summary>
            /// 获取远程访问用户的Ip地址
            /// </summary>
            /// <returns>返回Ip地址</returns>
            protected string GetLoginIp()
            {
                string loginip = "";
                //Request.ServerVariables[""]--获取服务变量集合 
                if (Request.ServerVariables["REMOTE_ADDR"] != null) //判断发出请求的远程主机的ip地址是否为空
                {
                    //获取发出请求的远程主机的Ip地址
                    loginip = Request.ServerVariables["REMOTE_ADDR"].ToString();
                }
                //判断登记用户是否使用设置代理
                else if (Request.ServerVariables["HTTP_VIA"] != null)
                {
                    if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
                    {
                        //获取代理的服务器Ip地址
                        loginip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
                    }
                    else
                    {
                        //获取客户端IP
                        loginip = Request.UserHostAddress;
                    }
                }
                else
                {
                    //获取客户端IP
                    loginip = Request.UserHostAddress;
                }
                return loginip;
            }
    
  • 相关阅读:
    Tomcat服务器安装、配置、测试
    Java开发环境配置
    文件-第12章-《数据结构题集》习题解析-严蔚敏吴伟民版
    12-1-顺序文件归并-文件-第12章-《数据结构》课本源码-严蔚敏吴伟民版
    外部排序-第11章-《数据结构题集》习题解析-严蔚敏吴伟民版
    11-2-置换-选择排序-外部排序-第11章-《数据结构》课本源码-严蔚敏吴伟民版
    11-1-败者树-外部排序-第11章-《数据结构》课本源码-严蔚敏吴伟民版
    内部排序-第10章-《数据结构题集》习题解析-严蔚敏吴伟民版
    10-12-顺序表地址排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
    10-11-基数排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
  • 原文地址:https://www.cnblogs.com/yzb305070/p/2004402.html
Copyright © 2011-2022 走看看