FuelPHPを使用した環境で、MACアドレスの取得方法を調査しました。
また、以下の方法で取得する事が出来ました
$ipaddress = \Input::ip(); //MACアドレス情報取得 $output = exec('/usr/sbin/arp -a -n '.$ipaddress); if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $output, $matches)) { $ip = $matches[1]; $mac = strtoupper(str_replace(array('-', ':'), '-', $matches[2])); $table[$mac] = $ip; } else { $mac ='unknown'; }
Linuxのコマンドを使用して取得しています。
PHPでも動く事が出来るのは以下の内容になります。
複数専用
//配列用のテーブル作成 $table = array(); //Linux用のarpコマンド exec('/usr/sbin/arp -a -n', $output); //配列に格納して確認する場合 foreach ($output as $line) { if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $line, $matches)) { $ip = $matches[1]; $mac = strtoupper(str_replace(array('-', ':'), '', $matches[2])); $table[$mac] = $ip; } } var_dump($table);
単体専用
//リモートアクセス時のIPアドレス取得 $ipaddress = $_SERVER["REMOTE_ADDR"]; //Linux用のarpコマンド $output = exec('/usr/sbin/arp -a -n'." ".$ipaddress); //単体のIPアドレスからMACアドレスを確認する場合 if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $output, $matches)) { $ip = $matches[1]; $mac = strtoupper(str_replace(array('-', ':'), '', $matches[2])); $table[$mac] = $ip; } else { $mac ='unknown'; } var_dump($table);