2011-07-29 169 views
2

我可以获取连接到我的网站的MAC地址吗?如何获取mac地址

此代码获取MAC地址主机并返回错误权限。

String macadress = string.Empty; 

     foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      OperationalStatus ot = nic.OperationalStatus; 
      if (nic.OperationalStatus == OperationalStatus.Up) 
      { 
       macadress = nic.GetPhysicalAddress().ToString(); 
       break; 
      } 
     } 

     return macadress; 

现在怎么能得到mac地址用户?

2. 如何获取ip用户?

回答

4

不幸的是,你不能以你想要的方式获得用户的MAC地址。我的理解是,MAC地址在离开本地网络时会从数据包中剥离出来。

您可以尝试Request.UserHostAddress获取用户的地址。但是,如果您位于负载均衡器或内容分发网络的后面,那么您可能首先尝试查看Request.Headers["X-Forwarded-For"]--这是用户原始IP地址通常会在请求转发时写入的地方。

的方法,我通常会采取的是尽量沿着线的东西:

var address = Request.Headers["X-Forwarded-For"]; 
if (String.IsNullOrEmpty(address)) 
    address = Request.UserHostAddress; 

的最后一个项目我的工作,我们实际上都登录,以防转发的头已被伪造。 ?

+1

_Unfortunately _ – SLaks

+0

MAC地址是_Local_区域网络的一个特点 - MAC地址,你会在一个包会从您的路由器看到的,因为这是在你的局域网是转发该数据包到你的东西。 – Hafthor

1

你不能从请求的MAC地址,但是,你可以用Request.UserHostAddress

0

获取IP你不能得到最终用户的计算机的MAC地址。

您可以使用Request.UserHostAddress获取用户的公共IP地址。

注意IP地址,这不会是每个用户唯一的。
如果多个用户在同一个代理之后或者在公司网络中,他们通常会共享相同的地址。
您可以检查X-Forwarded-For header以获取更多信息。
请注意,此标头可以链接或伪造。

0
public string GetMacAddress(string ipAddress) 
     { 
      string macAddress = string.Empty; 
      System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); 
      pProcess.StartInfo.FileName = "arp"; 
      pProcess.StartInfo.Arguments = "-a " + ipAddress; 
      pProcess.StartInfo.UseShellExecute = false; 
      pProcess.StartInfo.RedirectStandardOutput = true; 
      pProcess.StartInfo.CreateNoWindow = true; 
      pProcess.Start(); 
      string strOutput = pProcess.StandardOutput.ReadToEnd(); 
      string[] substrings = strOutput.Split('-'); 
      if (substrings.Length >= 8) 
      { 
       macAddress = substrings[3].Substring(Math.Max(0, substrings[3].Length - 2)) + "-" + substrings[4] + "-" + substrings[5] + "-" + substrings[6] + "-" + substrings[7] + "-" + 
         substrings[8].Substring(0, 2); 
       return macAddress; 
      } 

      else 
      { 
       return "not found"; 
      } 
     }