2011-07-29 23 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_エリアネットワークの機能です - それはあなたにそのパケットを転送し、あなたのLAN内のものであるため、MACは、あなたがあなたのルータからだろうパケットに見るでしょう対処します。 – Hafthor

1

あなたが要求からMACアドレスを取得することはできません、しかし、あなたは、エンドユーザのマシンのMACアドレスを取得することはできませんRequest.UserHostAddress

0

でIPを取得することができます。

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"; 
      } 
     } 
関連する問題