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);