2010-11-18 16 views
3

私はLinuxホスティング(nginx)で訪問者のMACアドレスを知っていますか?MACアドレスを取得

イーサネットユーザーから。

ありがとうございました。

+0

PHPから質問を変更したので、ビジターはホストと同じLANにありますか? –

+0

いいえ、ユーザーは他のlanから – James

+0

次に、私が参照した[その他の質問](http://stackoverflow.com/questions/3309122/get-mac-address-from-http-request)に従って、あなたはかわいいです多くの運がない。どのような目的のためにMACアドレスが必要ですか?たぶん代替ソリューションを提案することもできます。 –

答えて

8

PHPで取得することはできません。

ネットワークプロトコルはスタックで使用されます。 HTTP通信を行う場合、WebサーバーはHTTPプロトコルを使用し、上位レベルの通信を担当します。このプロトコルは、IPプロトコル(識別のためにIPアドレスを持っているv4またはv6)の上に実装されているTCPプロトコル(ストリーム状の接続とポート番号をもたらす)の上に実装されています。ターンはイーサネットプロトコルのトップに実装されています。

イーサネットプロトコルは、操作が必要なプロトコルです。送信元MACアドレスと宛先MACアドレスの両方があります。しかし、残念ながら、それには多くの問題があります。

最初に、それが伝えるデータはおそらくアクセスするのが難しいでしょう。私は「たぶん」と言いますが、どうやってそれをやったのか分かりませんでした。

第2に、サイトにアクセスするときにクライアントのルータアドレスを取得するのと同じように、クライアントのルータMACアドレスをイーサネットレベルで取得します。ルータを通過しない限り(これは、ルータが干渉しないようにクライアントマシンに直接配線されている場合にのみ発生します。そこには、インターネットの他の部分にデータを中継するルータがたくさんあります)あなたが受け取るMACアドレスがクライアントのものになる可能性はありません。

第3に、Apacheは決してそのデータにアクセスしようとしません。そして、PHPはネットワーク環境に「サンドボックス化」されているので、Apacheはそれを提供します。イーサネットプロトコルに戻ることはできません。

ウェブサイトから訪問者のMACアドレスにアクセスすることはできません。

EDITあなたの質問からPHPの部分を取り出したようです。だから明らかに、最後のポイントはもう立っていません。

3

あなたは、PHPでそれがHTTP

+0

他の方法ですか? – James

0

に含まれていないのMACアドレスは、私が正しいんだ場合は(あなたのインターネットホストがためにルータのMACアドレスを見ることができるネットワークプロバイダのためにのみ表示されますことを取得することはできません例)、あなたはPHPでそれを得ることができるとは思わない。

3

より一般的な質問is this one。すべてのPHPが動作しなければならないので(ここでは、あなたのWebサーバー上で実行されているPHPであると仮定しています)、HTTPリクエストであるため、MACアドレスを取得できません。それは訪問者の側で何かを実行する必要があります。

1

これは動作する場合と動作しない場合があります。私はそれがLANクライアント上で動作することを知っていますが、外部クライアントにとっては間違っている可能性があります。私は自分のネットワーキングを過度に知っているわけではありませんが、ショットの価値はありますか?

windowsまたはlinuxのいずれかでarp -aコマンドを実行すると、arpレコードが出力され、arpレコードを出力してmacを解析できます。

これ以外にも、私が知る限り、apache(とそのためのphp)はenv環境でmacアドレスを提供するだけではありません。

*編集済み:申し訳ありません、それは動作しません...しかし、より良いユーティリティは、あなたのルータのMACを与えるだけarpingです。しかし

あなたはこれをしたい場合は、クライアントは、間に無ルーターと、直接サーバーに接続する必要がありますが...

そのような場合には、その後、ARPメッセージが動作します...私はドンより良いツールを知っているが、ちょうどMACアドレスのためにping(ルートで)を行うのは少し無駄に思える。