none
获取外网客户端MAC地址 RRS feed

  • 问题

  • 有一个网站挂在一个托管服务器上,我们这边每台机器浏览,如何获取自己的MAC地址?

     /// <summary>
      /// 获取客户端Mac地址
      /// </summary>
      public class GetMacAddress
      {
        [DllImport("Iphlpapi.dll")]
        private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
        [DllImport("Ws2_32.dll")]
        private static extern Int32 inet_addr(string ip);
    
        // <summary>
        /// 取得客户端MAC地址
        /// </summary>
        public string GetNetCardMacAddress()
        {
          string userip = HttpContext.Current.Request.UserHostAddress;
          string strClientIP = HttpContext.Current.Request.UserHostAddress.ToString().Trim();
          Int32 ldest = inet_addr(strClientIP); //目的地的ip
          Int32 lhost = inet_addr("");  //本地服务器的ip
          Int64 macinfo = new Int64();
          Int32 len = 6;
          int res = SendARP(ldest, 0, ref macinfo, ref len);
          string mac_src = macinfo.ToString("X");
          while (mac_src.Length < 12)
          {
            mac_src = mac_src.Insert(0, "0");
          }
          string mac_dest = "";
          for (int i = 0; i < 11; i++)
          {
            if (0 == (i % 2))
            {
              if (i == 10)
              {
                mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));
              }
              else
              {
                mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
              }
            }
          }
          return mac_dest;
        }
      }
    这个在局域网能获取到 放在外网就不能获取

    
    
    I Belong To Jesus...
    2011年3月11日 2:01

答案

  • 你需要使用activex,客户端无法得到硬件信息的
    【孟子E章】
    2011年3月11日 2:10
    版主
  • 你好!

    这段代码只有在局域网相同网段中才会有效,过了路由就不行了。目前 Web 获取客户端 MAC 是借助 ActiveX 这样又需要安装 ActiveX 和设置安全性,建议使用记录或验证IP的方式。


    知识改变命运,奋斗成就人生!
    2011年3月11日 2:11
    版主

全部回复

  • 这个和在那里没关系

    浏览器是不会将客户机的mac地址返回给服务器端的,所以你在服务器上是无法通过访问网站的方式获得客户端的mac地址。

    除非你在客户机上安装程序(C/S模式)。


    family as water
    2011年3月11日 2:06
  • 你需要使用activex,客户端无法得到硬件信息的
    【孟子E章】
    2011年3月11日 2:10
    版主
  • 你好!

    这段代码只有在局域网相同网段中才会有效,过了路由就不行了。目前 Web 获取客户端 MAC 是借助 ActiveX 这样又需要安装 ActiveX 和设置安全性,建议使用记录或验证IP的方式。


    知识改变命运,奋斗成就人生!
    2011年3月11日 2:11
    版主