這個問題在網上查了以下,在抓與服務器同一網段內的MAC不難,但如何跨網段好像無解.
如果有高手了解這方面的,請賜教.
另外也可以考慮:
我已知道麼個網段的設定,通過不在這個網段的服務器能否找到該網段主機的MAC地址.

解决方案 »

  1.   

    根据OSI网络协议。实际在同一网段内(LAN),信息的传输才是基于MAC地址的传输(ARP,RARP),如果在跨网段,信息是通过Router基于TCP/IP协议进行传输,所以,理论上是不可能获取其他IP网段中节点的MAC地址。不过可以通过其他一些用户可能无法接受的方式,比如让他通过web安装你的ocx控件,采集信息返回给你的server。不过不知道有没有用户愿意这么做,嘿嘿:)
      

  2.   

    如果你确认你是做LAN内的ASP.NET,例如企业内的,需要获取MAC来确认其真实身份,那就搜索一下论坛,这个问题已经被问过n次了。如果你做Internet服务,最好放弃这个想法,因为没办法获得的,用户可能来自LAN以外,或者通过代理。
      

  3.   

    cat_hsfz(http://cathsfz.5000megs.com) ( ) 信誉:92 本企業內部有好多個不同的網段,這樣可以做到嗎?
    有沒有詳細一些的資料?inatas(Natas) ( ) 信誉:96 
    什麼樣的OCX可以使用呢?
      

  4.   

    企业中的话,就配置你所有的路由,通过规则匹配识别向你的服务器请求的HTTP流,在其HTTP头增加一个属性并且其值为客户端MAC,理论上绝对可行,问题只是这样做更复杂了,呵呵……
      

  5.   

    public string GetNetCardAddress2(string strIp)
    {
        string mac = "";    System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.FileName = "nbtstat";
        process.StartInfo.Arguments = "-a " + strIp;
        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);
        }    process.WaitForExit();    return mac.Replace("-", "").Trim();
    }但是这种方式好像要依赖于NetBIOS协议,客户端没有此安装此协议的话,返回不了相关信息。