150

接続クライアントのMACとIPアドレスを知る必要がありますが、PHPでこれを行うにはどうすればよいですか?

4

16 に答える 16

202

サーバー IP

サーバーの IP アドレスは から取得できます$_SERVER['SERVER_ADDR']

サーバーの MAC アドレス

netstat -ieMAC アドレスについては、Linux またはipconfig /allWindowsでの出力を解析できます。

クライアント 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 上にない場合はどうなるでしょうか。

クライアントにその情報を自発的に提供してもらい、他の手段で送信してもらうことができない限り、あなたは運が悪い.

于 2009-09-14T08:48:33.303 に答える
24

クライアントの MAC アドレス (HTTP 要求を発行したコンピューターという意味で) は、クライアントとサーバーの間のすべてのルーターによって上書きされます。

クライアント IP は、便利なように のスクリプトに提供され$_SERVER['REMOTE_ADDR']ます。一部のシナリオでは、特に Web サーバーがプロキシ (つまり、キャッシング プロキシ) の背後にある場合、はプロキシ$_SERVER['REMOTE ADDR']の IP を返し、多くの場合、元の要求クライアントの IP を含む追加の値があります。$_SERVER['HTTP_X_FORWARDED_FOR']

場合によっては、特に制御できない匿名化プロキシを扱っている場合、プロキシは実際の IP アドレスを返さず、期待できるのはプロキシの IP アドレスだけです。

于 2010-08-18T10:43:15.057 に答える
9

Windowsサーバーの場合、これを使用できると思います:

<?php
echo exec('getmac');
?>
于 2016-08-19T22:12:35.777 に答える
9

PHPでMACアドレスは取得できないと思いますが、IPは$_SERVER['REMOTE_ADDR']変数から取得できます。

于 2009-09-14T08:49:06.283 に答える
7

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コマンドの出力が得られます。

于 2010-07-16T12:02:30.353 に答える
2

このクラスを使用します (https://github.com/BlakeGardner/php-mac-address)

これは、Unix、Linux、および Mac OS X オペレーティング システム上で MAC アドレスを操作するための PHP クラスです。主に、ワイヤレス セキュリティ監査のスプーフィングを支援するために作成されました。

于 2013-11-05T11:17:41.377 に答える
1

次の解決策を使用して問題を解決できます。

$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;
于 2018-08-18T21:00:47.517 に答える
0
// 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 でも機能します。

于 2015-11-05T06:04:28.357 に答える
-1

Linux では、iptables を使用して、Web サーバーへの各要求を MAC アドレスと IP でファイルに記録できます。php から IP アドレスを使用して最後の項目を検索し、MAC アドレスを取得します。

前述のように、MAC アドレスはトレースの最後のルーターのものであることを思い出してください。

于 2016-05-04T05:51:16.797 に答える