PHPからarpコマンドを実行してLAN内のMACアドレスとIPアドレスの変換テーブルを参照できるようにしてみました。単純に結果を正規表現にかけているだけです。
ちなみにひとつのMACが複数のIPを持つ場合には対応していません。それと、arpの性質上、頻繁にキャッシュクリアされるので、用途によっては注意が必要です。
<?php $table = array(); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { exec('arp -a', $output); // for Windows } else { exec('/usr/sbin/arp -a -n', $output); // for Linux(debian) } 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);
結果
array(2) { ["123456789ABC"]=> string(13) "192.168.0.1" ["0003FFFFFFFF"]=> string(15) "192.168.131.254" }
Linuxのarpコマンドがarp -aで実行するとすごく遅いので、原因を調べていたら、デフォルトではIPアドレスからDNSの逆引きをしているということでした。-nオプションを付けることで、DNSリクエストを送らなくなるので一瞬で表示できます。