PHPでイントラネットユーザーMACアドレス(WINDOWS/linux)の実現コードを取得します。
2978 ワード
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];
break;
}
}
return $mac_addr ? strtoupper($mac_addr) : '';
}
else if(PHP_OS == 'Linux')
{
return true;
}
}
関数が修正されました。LINUXでEXEC関数が使えないこと、つまりMACアドレスが得られないことが分かりました。コミュニケーションを通じて、このプロジェクトはLINUXサーバーの下に展開しなければならないので、長い間悩んだ結果、ようやく解決策を見つけました。EXECを実行しなくても、ネットユーザーのMACアドレスを得ることができます。イントラネットサーバには、192.168.151のサーバがあり、サーバー上のAPIにアクセスし、このAPIにアクセスすると、ユーザーMACを取得し、JOSNの方式でユーザーアカウント情報を出力します。このサーバはMACを取得することができますので、少し利用することができます。C URLを用いてソースIP方式を偽造し(IPはLINUXサーバのIPではなく、クライアントアクセスのIPアドレスである)、C URLから151サーバまでを取得し、サーバはそれに対応して、ユーザIPアドレスとARP-Aパラメータの正則方式によってクライアントのMACアドレスを得ることができ、プログラムは151で実行され、151はWINDOWS 2008サーバである。ただし、REMOTE_は使えないので注意してください。ADDRは、HTTP_を使用しなければなりません。CLIENT_IPです原因はHTTP_CLIENT_IPは、C URLを用いて偽造することができ、LINUXを用いてユーザIPを取得し、151処理に転送することができる。疑問:ユーザーのIPからMACアドレスを取得すると、ユーザーがIPを変えたらどうなりますか?CMDを使ってARP-Aを分析して、ユーザーとIPを交換しても、ユーザーのはずのこのコンピュータのMACアドレスはデフォルトでは変更されません。以下はネット友達のIP取得に関する文章です。dzのコードでIPの件を判断するのは頭が痛いです。ADDR,HTTP_CLIENT_IP,HTTP_X_FOREWARD_FORの三つのものはマニュアルに詳しくないです。基本的にないに等しいです。ネットでggを探しました。もう一つの考えは偶然です。JSでIPを取ってからPOSTでサーバーに行きます。Yのは代理でサーバーを騙します。種のインターネットがあって、先にJsを閉めました!あはは、これからはajaxで試してみます。この3つの変数を使ってもいいです。死ぬほど使いません。SERVER[']//for php一、プロキシを使用していない場合:REMOTE_ADDR=あなたのIP HTTP_VIA=数値がない、またはHTTP_を表示しないX_FOREWARD_FOR=数値がない、または表示しない、透明なプロキシを使用する場合:Transparent Proxies REMOTE_ADDR=最後のプロキシサーバーIP HTTP_VIA=プロキシIP HTTP_X_FOREWARD_FOR=あなたの本当のIPは、複数のプロキシサーバーを通過する時、この値は以下の通りです。このようなプロキシサーバーはまだあなたの情報をあなたの訪問先に転送しています。本当の識別情報を隠す目的は達成できません。三、通常の匿名プロキシを使用する場合:Anonymous Proxies REMOTE_ADDR=最後のプロキシサーバーIP HTTP_VIA=プロキシIP HTTP_X_FOREWARD_FOR=プロキシIPは、複数のプロキシサーバーを経由する場合、この値は以下の通りです。実際のIPは隠していますが、プロキシを使って彼らにアクセスしたということを訪問先に伝えました。四、詐欺的なプロキシを使用する場合:Disttoting Proxies REMOTE_ADDR=プロキシIP HTTP_VIA=プロキシIP HTTP_X_FOREWARD_FOR=無作為のIPは、複数のプロキシサーバーを通過する時、この値は以下の通りです。訪問先にプロキシサーバーを使っていると教えましたが、本物のIPの代わりに嘘のランダムIPを作りました。五、高匿名プロキシを使用する場合:High Anonymity Proxies(Elite proxies)REMOTE_ADDR=プロキシIP HTTP_VIA=数値がない、またはHTTP_を表示しないX_FOREWARD_FOR=数値がないか、表示しないか、複数のプロキシサーバーを経由した場合、この値は以下のようになります。完全にプロキシサーバの情報であなたのすべての情報を代替しています。まるであなたがそのプロキシサーバーを使って直接にオブジェクトにアクセスします。REMOTE_ADDRはあなたのクライアントがあなたのサーバーと“握手”する時のIPです。「匿名エージェント」を使ったら、REMOTE_ADDRはプロキシサーバのIPを表示します。HTTP_CLIENT_IPはプロキシサーバから送信されるHTTPヘッダである。「スーパー匿名エージェント」であれば、none値を返します。同様に、REMOTE_ADDRはこのプロキシのIPにも置き換えられます。SERVER['REMOTE_ADDR'////アクセス端末(ユーザかもしれません。プロキシかもしれません。)IP$uSERVER['HTTP_CLIENT_IP';//プロキシ側の(存在する可能性があります。偽造できます。)SERVER['HTTP_X_FOREWARD_FOR'////ユーザーはどのIPで使用していますか?