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