ホームページ >バックエンド開発 >PHPチュートリアル >Windows Live Messenger 2011 PHPでイントラネットユーザーのMACアドレス(WINDOWS/Linux)を取得するための実装コード

Windows Live Messenger 2011 PHPでイントラネットユーザーのMACアドレス(WINDOWS/Linux)を取得するための実装コード

WBOY
WBOYオリジナル
2016-07-29 08:46:31977ブラウズ

复制代解答代打如下:


function ce_getmac()
{
if(PHP_OS == 'WINNT')
{
$return_array = array();
$temp_array = array();
$mac_addr = "";
@exec("arp -a",$return_array);
foreach($return_array as $value)
{
if(strpos($value,$_SERVER["HTTP_CLIENT_IP"]) !== false &&
preg_match("/(:?[0-9a-f]{2} [:-]){5}[0-9a-f]{2}/i",$value,$temp_array))
{
$mac_addr = $temp_array[0];
休憩;
}
}
$mac_addr を返しますか? strtoupper($mac_addr) : '';
}
else if(PHP_OS == 'Linux')
{
return true;
}
}


LINUXではEXEC関数が使えない、つまりMACアドレスが取得できないことが分かりました。通信後、プロジェクトを LINUX サーバーに展開する必要があります。著者は長い間考えた結果、EXEC を実行せずにイントラネット ユーザーの MAC アドレスを取得できる解決策を見つけました。
イントラネットサーバーには192.168.1.151にサーバーがあり、このAPIにアクセスするとユーザーのMACが取得され、ユーザーアカウント情報がJOSNモードで出力されます。 MAC、少しは使えます。
CURL を使用してソース IP (IP は LINUX サーバーの IP ではなく、クライアントがアクセスする IP アドレス) を偽造し、CURL を 151 サーバーに送信すると、サーバーは応答を取得し、クライアントは次のように取得できます。ユーザーの IP アドレスと ARP -A パラメーターの MAC アドレスの通常の方法では、プログラムは 151 で実行され、151 は WINDOWS 2008 サーバーです。ただし、REMOTE_ADDR は使用できず、HTTP_CLIENT_IP を使用する必要があることに注意してください。 その理由は、HTTP_CLIENT_IP が CURL を使用して偽造できるため、LINUX を使用してユーザー IP を取得し、151 に送信して処理できるためです。
質問: ユーザーの IP に基づいて MAC アドレスを取得します。ユーザーが IP を変更した場合はどうすればよいですか? CMD で ARP -A 分析を使用すると、ユーザーが IP を変更しても、ユーザーに対応するコンピューターの MAC アドレスはデフォルトでは変更されません。
以下は IP 取得に関するネチズンの記事からの抜粋です:
Dz の IP を決定するコードは面倒すぎる REMOTE_ADDR、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR の 3 つはマニュアルに詳しく記載されておらず、基本的に欠落しています。
ネットで調べてみたところ、JSを使ってIPを取得してサーバーにPOSTするという賢すぎるアイデアがありました。オンラインに接続する勇気がある場合は、まず JS をオフにしてください。 !あはは、将来機会があれば ajax で試してみたいと思います。そうすれば、これら 3 つの変数の使用について心配する必要がなくなります。
$_SERVER['...']; // php の場合
1. プロキシ サーバーが使用されていない場合:
REMOTE_ADDR = あなたの IP
HTTP_VIA = 値なしまたは表示なし
HTTP_X_FORWARDED_FOR = 値なしまたは表示なし
2.透過的プロキシ サーバーを使用する場合: 透過的プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_VIA = プロキシ サーバー IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163、203.98.182.163 、203.129.72.215。
このタイプのプロキシ サーバーは依然としてあなたの情報を訪問者に転送するため、あなたの本当の身元を隠すという目的を達成することはできません。
3. 通常の匿名プロキシ サーバーを使用する状況: 匿名プロキシ
REMOTE_ADDR = 最後のプロキシ サーバーの IP
HTTP_VIA = プロキシ サーバーの IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98 .182.163、203.98.182.163、203.129.72.215。
実際の IP を隠しますが、訪問者にはプロキシ サーバーを使用してアクセスしていることを明らかにします。
4. 不正なプロキシ サーバーの使用: プロキシの歪み
REMOTE_ADDR = プロキシ サーバーの IP
HTTP_VIA = プロキシ サーバーの IP
HTTP_X_FORWARDED_FOR = ランダムな IP 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163、203.98。 182.163、203.129.72.215。
訪問者に、プロキシ サーバーを使用していることを伝えますが、実際の IP の代わりに偽のランダム IP を作成してなりすまします。
5. 高匿名性プロキシサーバーの使用状況: 高匿名性プロキシ (エリートプロキシ)
REMOTE_ADDR = プロキシサーバー IP
HTTP_VIA = 値なしまたは表示されません
HTTP_X_FORWARDED_FOR = 複数のプロキシサーバーを経由する場合、この値は表示されません。次のようなもの: 203.98.182.163、203.98.182.163、203.129.72.215。
プロキシ サーバーを使用してオブジェクトに直接アクセスしているのと同じように、すべての情報をプロキシ サーバーの情報で完全に置き換えます。
REMOTE_ADDR は、クライアントがサーバーと「ハンドシェイク」するときの IP です。 「匿名プロキシ」が使用されている場合、REMOTE_ADDR にはプロキシ サーバーの IP が表示されます。
HTTP_CLIENT_IP は、プロキシ サーバーによって送信される HTTP ヘッダーです。 「スーパー匿名プロキシ」の場合は、値 none が返されます。同様に、REMOTE_ADDR はこのプロキシ サーバーの IP に置き換えられます。
$_SERVER['REMOTE_ADDR']; //アクセス側(ユーザーの場合もプロキシの場合もある)IP
$_SERVER['HTTP_CLIENT_IP'] //エージェントの側(存在する可能性がある、偽造可能)
$_SERVER ['HTTP_X_FORWARDED_FOR] ']; //ユーザーがプロキシとして使用する IP (存在する可能性もあれば、偽造される可能性もある)

上記は、Windows Live Messenger 2011 PHP でイントラネット ユーザー (WINDOWS/linux) の MAC アドレスを取得するための実装コードを、Windows Live Messenger 2011 の内容を含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。