接続クライアントのMACとIPアドレスを知る必要がありますが、PHPでこれを行うにはどうすればよいですか?
16 に答える
サーバー IP
サーバーの IP アドレスは から取得できます$_SERVER['SERVER_ADDR']
。
サーバーの MAC アドレス
netstat -ie
MAC アドレスについては、Linux またはipconfig /all
Windowsでの出力を解析できます。
クライアント IP アドレス
からクライアント IP を取得できます。$_SERVER['REMOTE_ADDR']
クライアント MAC アドレス
クライアントの MAC アドレスは、1 つの特別な状況 (クライアントがサーバーと同じイーサネット セグメント上にある場合)を除き、利用できません。
したがって、ある種の LAN ベースのシステムを構築していて、クライアントがarp -n
同じイーサネット セグメント上にある場合、 (linux) またはarp -a
(windows)の出力を解析することで MAC アドレスを取得できます。
編集:外部コマンドの出力を取得する方法をコメントで尋ねます-1つの方法は、バッククォートを使用することです。
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);
#look for the output line describing our IP address
foreach($lines as $line)
{
$cols=preg_split('/\s+/', trim($line));
if ($cols[0]==$ipAddress)
{
$macAddr=$cols[1];
}
}
しかし、クライアントが LAN 上にない場合はどうなるでしょうか。
クライアントにその情報を自発的に提供してもらい、他の手段で送信してもらうことができない限り、あなたは運が悪い.
クライアントの MAC アドレス (HTTP 要求を発行したコンピューターという意味で) は、クライアントとサーバーの間のすべてのルーターによって上書きされます。
クライアント IP は、便利なように のスクリプトに提供され$_SERVER['REMOTE_ADDR']
ます。一部のシナリオでは、特に Web サーバーがプロキシ (つまり、キャッシング プロキシ) の背後にある場合、はプロキシ$_SERVER['REMOTE ADDR']
の IP を返し、多くの場合、元の要求クライアントの IP を含む追加の値があります。$_SERVER['HTTP_X_FORWARDED_FOR']
場合によっては、特に制御できない匿名化プロキシを扱っている場合、プロキシは実際の IP アドレスを返さず、期待できるのはプロキシの IP アドレスだけです。
Windowsサーバーの場合、これを使用できると思います:
<?php
echo exec('getmac');
?>
PHPでMACアドレスは取得できないと思いますが、IPは$_SERVER['REMOTE_ADDR']
変数から取得できます。
arp を別のグループに入れるだけです。
デフォルト:
-rwxr-xr-x 1 root root 48K 2008-11-11 18:11 /usr/sbin/arp*
コマンドを使用:
sudo chown root:www-data /usr/sbin/arp
あなたが得るでしょう:
-rwxr-xr-x 1 root www-data 48K 2008-11-11 18:11 /usr/sbin/arp*
また、apache はユーザー www-data の下で実行されるデーモンであるため、このコマンドを実行できるようになりました。
したがって、PHP スクリプトを使用する場合は、次のようになります。
<?php
$mac = system('arp -an');
echo $mac;
?>
Linuxarp -an
コマンドの出力が得られます。
このクラスを使用します (https://github.com/BlakeGardner/php-mac-address)
これは、Unix、Linux、および Mac OS X オペレーティング システム上で MAC アドレスを操作するための PHP クラスです。主に、ワイヤレス セキュリティ監査のスプーフィングを支援するために作成されました。
次の解決策を使用して問題を解決できます。
$mac='UNKNOWN';
foreach(explode("\n",str_replace(' ','',trim(`getmac`,"\n"))) as $i)
if(strpos($i,'Tcpip')>-1){$mac=substr($i,0,17);break;}
echo $mac;
// Turn on output buffering
ob_start();
//Get the ipconfig details using system commond
system('ipconfig /all');
// Capture the output into a variable
$mycomsys=ob_get_contents();
// Clean (erase) the output buffer
ob_clean();
$find_mac = "Physical";
//find the "Physical" & Find the position of Physical text
$pmac = strpos($mycomsys, $find_mac);
// Get Physical Address
$macaddress=substr($mycomsys,($pmac+36),17);
//Display Mac Address
echo $macaddress;
これipconfig /all
は、Windows システム コマンドと同様に、Windows でも機能します。
Linux では、iptables を使用して、Web サーバーへの各要求を MAC アドレスと IP でファイルに記録できます。php から IP アドレスを使用して最後の項目を検索し、MAC アドレスを取得します。
前述のように、MAC アドレスはトレースの最後のルーターのものであることを思い出してください。