web-dev-qa-db-ja.com

HTTPリクエストからMACアドレスを取得するにはどうすればよいですか?

誰かがHTTPリクエストからユーザーのMACアドレスを取得する際の指針を教えてもらえますか?

ユーザーは外部私のネットワークからのものになります。

27
Richard.Gale

ネットワークの設定によって異なります。しかし、おそらく違います。

以下は、イーサネットとIPに関する短い復習です。 MACアドレスは、ネットワークカードの一意のアドレスです。これは、ネットワークセグメント上のどのユーザーのパケットであるかを識別するために使用されます。 ARPを使用して、IPアドレスのMACアドレスを取得できます。 ただし、これは同じネットワークセグメントにいる場合にのみ期待どおりに機能します

だから問題は、ネットワークセグメントとは何ですか?使用するテクノロジーによって異なりますが、一般的なケースは次のとおりです。ワイヤレスネットワーク全体がネットワークセグメントです。ネットワーク上のすべてのユーザーはEthernet経由を他のすべてのユーザーと話すことができます。有線ベースのネットワークでは、これはハードウェアに依存します。古き良きBNCまたはハブがある場合、すべての用途で1つのネットワークセグメントがあります。この場合も、各ユーザーは他のユーザーと話すことができます。ネットワーク内のスイッチの場合、ネットワークセグメントは、ユーザーをスイッチに接続する唯一のケーブルです。ここではEthernet経由でのみスイッチと通信できます。他のすべてのユーザーには少なくともIPが必要です。

TCP/IP上に構築されるHTTPのほとんどの状況があまりにも悪いので、ユーザーと同じネットワークセグメントに99.99%になることはありません。 ARPを使用できますが、最初のホップのMACアドレスのみを取得します。ハードウェアによっては、イーサネットベースのIPネットワークに接続していないこともあります。 ATMなど...

40
rioki

ASP.NETでそれを行う方法はないと思います。
MACはTCPパケットのプロパティであり、HTTPレベルではパケットやMACはありません(たとえば、単一のHTTPリクエストは複数のTCPで構成される場合があります_パケット)。

パケットスニファ(WireSharkなど)を使用してTCPパケットをキャプチャし、それらを分析してMACを抽出し、HTTPリクエストにマッピングすることができます。

とにかく、ユーザーがサーバーと同じネットワークセグメントに属していない限り、有用なデータは得られません。

UPD。コメントで指摘したように、ネットワーク層を混同しました。 MACアドレスは Ethernet frame のプロパティであり、TCPパケットではありません。
しかし、結論は依然として正しいです。

2
VladV

ActiveXコンポーネントを作成する場合を除き、これは不可能です。その場合、ActiveXコンポーネントはIEでのみ機能します。

0
zahstra