2012-04-29 9 views
2

システム(Webアプリケーション)にログインしているユーザのIPアドレスとMACアドレスを取得します。 私は、MACアドレスを取得するには、このメソッドを使用していますコードASP.NETを使用してMacとIPアドレスを取得する方法ログインのC#ユーザ

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); 

のラインにこれ​​らを使用していますが、問題は、私はコンピュータのすべてのアダプタのMACアドレスを取得しています。

どれが正しいのですか?自分のウェブサイトに接続されているデバイスの正しいMACアドレスを取得するにはどうすればいいですか?

また、アダプタのIPも取得する方法。

私は私のPC上でそれをしようとすると、それは8と8つのアダプタを与えるMACは、私は私のPCにしようとしています

に対処し、私は、イントラネットに接続された有線接続、およびインターネットに接続された無線を持っています。

+2

5タグを助けないだろうし、それらのどれもあなたが使用しているどのような言語伝えますか? – geoffspear

+0

OPはC#がデフォルトの言語であると思っていた可能性がありますhttp://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx –

+0

私はC#を使用していますタイトルとコンテンツを編集します今すぐにタグを付けていただきありがとうございます。 – msytNadeem

答えて

2

宛先(Webサイトのサーバー)と送信元IPアドレスのみを取得できる送信元(クライアントのコンピュータ)との間でソケット接続が発生したときに、Webサイトに接続しているユーザーのMACアドレスを取得することはできません。

using System.Net; 

Private string GetIP() 
{ 
string strHostName = ""; 
strHostName = System.Net.Dns.GetHostName(); 

IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName); 

IPAddress[] addr = ipEntry.AddressList; 

return addr[addr.Length-1].ToString(); 

} 

ソース:すべてのHere

+0

MACアドレスは必須ではない、それはリンクのコードと同じです:) – msytNadeem

0

まず、いいだろう、ユーザーのIPアドレスを取得するためには、 - MACは、それがソケット接続(> Serverクライアント<)を介して送信されたことがない者のアドレスなぜあなたのクライアント(ユーザ)のMACアドレスがであるか知るためにMacアドレスはユニークではありません

.NET Frameworkのみを使用してSERVER接続を取得することはできますが、クライアントMACアドレスを取得するためには、ユーザー自身は決してユーザー自身ではありません.JavaScriptやActiveXコントロールに頼ることができますFirefoxとしてのInternet Explorerは、数年前にActiveXコントロールのサポートをすでに廃止しています。

これについては、this articleを参照してください。

+0

ありがとうそれを使用しないとユニークではありません:)とIPアドレスを取得するには、あなたはそれです: – msytNadeem

+1

それはそれが定義されているとどのようにユニークではありませんか?可能性はさらに増しますか? 1 281,474,976,710,656のうち1。 ** "イーサネットMACアドレスは、特定のイーサネットインターフェイスに固有の48ビットの数字です" ** [IEEE規格](http://grouper.ieee.org/groups/msc/MSCRacInfo/FAQ%20Registration%20Authority% 20改訂。htm)(psのブログは有効なコメントではありません) – LokizFenrir

1
using System.Runtime.InteropServices; 

[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); 

private static string GetClientMAC(string strClientIP) { 
    string mac_dest = ""; 
    try { 
     Int32 ldest = inet_addr(strClientIP); 
     Int32 lhost = inet_addr(""); 
     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"); 
     } 

     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)); 
       } 
      } 
     } 
    } catch (Exception err) { 
     throw new Exception("Lỗi " + err.Message); 
    } 
    return mac_dest; 
} 

このコードは:)

+0

通常、匿名コードの行を単に投稿するのではなく、解決策を説明する方がいいです。 [良い答えを書くにはどうすればいいですか]と[コードベースの回答を完全に説明する](https://meta.stackexchange.com)を読むことができます。/question/114762/explain-entire-%E2%80%8C%E2%80%8Bcode-based-answers) –

+1

私はプログラマが彼の質問に対する解決策を必要としていると思います。そして、良いプログラマは、コードが何をしているのか理解するでしょう。 –

関連する問題