ASP.NET(C#)WebAppでは、訪問者のPCのIPを簡単に取得できますが、ASP.NET WebAppで訪問者のPCのMACアドレスを取得するにはどうすればよいですか?
また、このASP.NETアプリは、当社の内部イントラネット上で実行されており、訪問者も当社の同じ内部イントラネット内にいます。
ASP.NET(C#)WebAppでは、訪問者のPCのIPを簡単に取得できますが、ASP.NET WebAppで訪問者のPCのMACアドレスを取得するにはどうすればよいですか?
また、このASP.NETアプリは、当社の内部イントラネット上で実行されており、訪問者も当社の同じ内部イントラネット内にいます。
MACアドレスはIPヘッダー(またはそれより上の他のプロトコル)の一部ではないため、HTTPトラフィックだけが表示されている場合は使用できません。
編集(OPの更新後):クライアントとサーバーは同じ内部ネットワーク上にあるので、MACアドレスではなくIPアドレスからホスト名を取得する方が良いのではないでしょうか?IPアドレスに基づいてホスト名を簡単に検索できます。
すぐに頭に浮かぶ答えは、これは、クライアントブラウザで実行されるActiveXコントロールを作成して、ユーザーに代わってこの情報を取得する場合にのみ可能であるということです。一方、javascriptが情報を取得するCOMオブジェクトをインスタンス化できる場合は、クライアントのJavaScriptで可能になる可能性があります。私が考えることができる他の唯一の方法は、IPがキャプチャされた後にARP要求を実行するWindowsサービスを使用することです。
これを簡単に行うことはできません。MACアドレスとIPアドレス間の変換を可能にするARPなどのプロトコルがありますが、このトラフィックは通常ファイアウォールの背後にあるため、公開Webサイトでは利用できません。
イントラネットでは、ASP.NETを介してではなく、何かを実行できる場合があります。この情報を取得するには、他のメカニズムを使用する必要がありますが、これらの種類のツール(パケットスニファなど)は通常、開発者が利用できず、企業のISポリシーに違反する可能性があります。
同じサブネット上にいるため、 GetIpNetTableをP / Invoke して、WebサーバーのARPテーブルを取得できます。これをリアルタイムで行う場合、追加の作業は必要ありません。クライアントと会話しているので、ARP情報が得られます。それ以外の場合は、ARPリクエストまたはIPトラフィック(たとえば、aping)を作成してキャッシュに入れる必要があります。DHCPやその他のネットワークの変動(マシンの電源がオフになっているなど)が原因で、可能であることに注意してください。後でIPをMACに変換すると、別の答えが得られます。
また、外部クライアント(つまり、ルーターを介したクライアント)はテーブルに表示されないことにも注意してください。そのため、それに対処する準備をしてください。何らかの理由でMACが必要な場合は、技術的にはルーターのMACです。