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;
        }
原文地址:https://www.cnblogs.com/yzb305070/p/2004402.html