2011-07-29 204 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"; 
      } 
     }