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或者需要下面这段代码的文件里

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// <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;
}

 

 

posted on   澜紫癜青  阅读(3591)  评论(4编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?

导航

< 2011年7月 >
26 27 28 29 30 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
点击右上角即可分享
微信分享提示