当前位置:编程学习 > C#/ASP.NET >>

如何在asp.net后台获得客户端的MAC地址

RT
网上有很多种方法,我测试了一下,很多根本通过不了,比如
ManagementObject obj1 = enumerator1.get_Current(); 中get_Current()不识别
或者process.Start();这句报错等等
这些都是网上搜到的方法中出现的问题。

谁能给我一个能运行的通的获取客户端MAC地址的程序啊???
注意,我发布到服务器后要获得的是客户端的MAC地址!!! --------------------编程问答--------------------
不行地。只能用Active控件,或用Flash试试吧 --------------------编程问答--------------------
引用 楼主 rendanrujutiny 的回复:
注意,我发布到服务器后要获得的是客户端的MAC地址!!!

asp.net 服务器端 是通过tcp/ip 和客户端 建立连接的。 只有ip header 没有 MAC地址. 

你要干啥子? 干什么事情都专业点(不管什么事情),读点基本概念好不好

--------------------编程问答-------------------- 这个在技术上无解,请不要浪费时间了。 --------------------编程问答-------------------- 你找的代码都是获取服务器端的。

稍微有点网络知识的人都知道,web程序运行在http协议上,下层的是tcp/ip协议。而mac地址是数据链路层的协议。换一句话说,可以存在一个客户端,根本没有mac地址,照样可以访问你的网站。所以根本没办法获取。 --------------------编程问答--------------------
引用 4 楼 devmiao 的回复:
你找的代码都是获取服务器端的。

稍微有点网络知识的人都知道,web程序运行在http协议上,下层的是tcp/ip协议。而mac地址是数据链路层的协议。换一句话说,可以存在一个客户端,根本没有mac地址,照样可以访问你的网站。所以根本没办法获取。
+1 --------------------编程问答-------------------- 如果楼主能保证客户端都是IE,那么微软提供WMI脚本库可以获取客户windows机器的MAC
写几行js调用一下就可以了 --------------------编程问答--------------------
function GetMacAddress() {
    var _locator = new ActiveXObject("WbemScripting.SWbemLocator");
    var _service = _locator.ConnectServer(".");
    var _sql="Select MACAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE' ";
    var _properties = _service.ExecQuery(_sql);
    var _e = new Enumerator(_properties);
    var _p = _e.item();
    var _mac = _p.MACAddress;
    return _mac;
    }
--------------------编程问答-------------------- 我觉得这不是一个好的需求。尝试找其他方法吧。 --------------------编程问答--------------------
引用 4 楼 devmiao 的回复:
你找的代码都是获取服务器端的。

稍微有点网络知识的人都知道,web程序运行在http协议上,下层的是tcp/ip协议。而mac地址是数据链路层的协议。换一句话说,可以存在一个客户端,根本没有mac地址,照样可以访问你的网站。所以根本没办法获取。


我是这样的 一个投票系统,挂在服务器上,然后各个客户端的用户在投票时把他们各自机器的MAC地址记录下来一同存到数据库中,这个需求做不到么??? --------------------编程问答--------------------
引用 8 楼 findcaiyzh 的回复:
我觉得这不是一个好的需求。尝试找其他方法吧。

我是这样的 一个投票系统,挂在服务器上,然后各个客户端的用户在投票时把他们各自机器的MAC地址记录下来一同存到数据库中,这个需求做不到么??? --------------------编程问答--------------------
引用 6 楼 microtry 的回复:
如果楼主能保证客户端都是IE,那么微软提供WMI脚本库可以获取客户windows机器的MAC
写几行js调用一下就可以了


我是这样的 一个投票系统,挂在服务器上,然后各个客户端的用户在投票时把他们各自机器的MAC地址记录下来一同存到数据库中,这个需求做不到么??? --------------------编程问答-------------------- 可以做到啊,但是肯定没有elegant的实现了
或者只有IE允许
可以用7楼的的script或者自己写ActiveX控件
 
或者用java applet,还的是Signed applet才可以。 --------------------编程问答-------------------- 其他选择是,记录IP地址。

或者User系统,每个user只能投票一次。 --------------------编程问答--------------------
引用 9 楼 rendanrujutiny 的回复:
Quote: 引用 4 楼 devmiao 的回复:

你找的代码都是获取服务器端的。

稍微有点网络知识的人都知道,web程序运行在http协议上,下层的是tcp/ip协议。而mac地址是数据链路层的协议。换一句话说,可以存在一个客户端,根本没有mac地址,照样可以访问你的网站。所以根本没办法获取。


我是这样的 一个投票系统,挂在服务器上,然后各个客户端的用户在投票时把他们各自机器的MAC地址记录下来一同存到数据库中,这个需求做不到么???

做不到!你可以采用短信验证、验证身份证等办法。 --------------------编程问答--------------------
引用 7 楼 microtry 的回复:
function GetMacAddress() {
    var _locator = new ActiveXObject("WbemScripting.SWbemLocator");
    var _service = _locator.ConnectServer(".");
    var _sql="Select MACAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE' ";
    var _properties = _service.ExecQuery(_sql);
    var _e = new Enumerator(_properties);
    var _p = _e.item();
    var _mac = _p.MACAddress;
    return _mac;
    }

这种方法即便权限足够,可行,也是可以伪造的。 --------------------编程问答--------------------
引用 7 楼 microtry 的回复:
function GetMacAddress() {
    var _locator = new ActiveXObject("WbemScripting.SWbemLocator");
    var _service = _locator.ConnectServer(".");
    var _sql="Select MACAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE' ";
    var _properties = _service.ExecQuery(_sql);
    var _e = new Enumerator(_properties);
    var _p = _e.item();
    var _mac = _p.MACAddress;
    return _mac;
    }

这种方法好比画一个文本框,让用户输入“你的Mac地址是?”,只能自欺欺人。而且这个代码在主流浏览器(包括IE的默认安全等级下)和操作系统上基本都跑不起来。能跑起来的高级用户都知道怎么伪造http post数据。 --------------------编程问答--------------------
引用 13 楼 findcaiyzh 的回复:
其他选择是,记录IP地址。

或者User系统,每个user只能投票一次。

投票时不记名的,没有用户信息,只能记录电脑的相关信息了,而且电脑不是台式或者笔记本,是ipad。。。 --------------------编程问答--------------------
引用 6 楼 microtry 的回复:
如果楼主能保证客户端都是IE,那么微软提供WMI脚本库可以获取客户windows机器的MAC
写几行js调用一下就可以了


需要在ipad上运行,使用的是safari浏览器,这个可行么??? --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 15 楼 devmiao 的回复:
Quote: 引用 7 楼 microtry 的回复:

function GetMacAddress() {
    var _locator = new ActiveXObject("WbemScripting.SWbemLocator");
    var _service = _locator.ConnectServer(".");
    var _sql="Select MACAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE' ";
    var _properties = _service.ExecQuery(_sql);
    var _e = new Enumerator(_properties);
    var _p = _e.item();
    var _mac = _p.MACAddress;
    return _mac;
    }

这种方法即便权限足够,可行,也是可以伪造的。


实在不行获取客户端ip也行,ip怎么获取啊? --------------------编程问答-------------------- 最多能获取局域网windows机器的mac,我这有实际应用,其他的获取不到 --------------------编程问答-------------------- 只能获取局域网内的mac --------------------编程问答--------------------
引用 22 楼 liuchaolin 的回复:
只能获取局域网内的mac

就是局域网 怎么获取? --------------------编程问答--------------------
引用 23 楼 rendanrujutiny 的回复:
Quote: 引用 22 楼 liuchaolin 的回复:

只能获取局域网内的mac

就是局域网 怎么获取?



public string GetMac(string clientIp)
    {
        string mac = "";
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.FileName = "nbtstat";
        process.StartInfo.Arguments = "-a " + clientIp;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();
        string output = process.StandardOutput.ReadToEnd();
        int length = output.IndexOf("MAC Address =");
        if (length > 0)
        {
            mac = output.Substring(length + 14, 17);
        }
        return mac;
        
    } --------------------编程问答-------------------- string mac=GetMac("192.168.1.11");
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,