MacでARPテーブルからEthernetインタフェースのベンダ名を表示するBashスクリプトの例
#!/usr/bin/env bash OUIFILE="./oui.txt" # ファイルの存在確認 if [ ! -f $OUIFILE ]; then echo "OUI file not found" exit 1 fi # テンポラリファイルの作成 tmpfile=`mktemp -t tmp.XXXXXXXXX` || exit 1 arp -a | grep ethernet > $tmpfile 2> /dev/null while read host address at hwaddress_raw on iface ifscope hwtype; do # MACアドレスが "-" で区切られた2桁の16進表示になるようにする hwaddress=$(for i in $(echo $hwaddress_raw | sed "s/:/ /g"); do echo 0x$i; done | xargs printf "%02x-%02x-%02x-%02x-%02x-%02x\n") # 先頭の3つの数値だけ取り出す vendor_c=$(echo $hwaddress | cut -d "-" -f 1-3) # ベンダー名を取り出す.表示に影響が出るためサブシェルの実行結果に含まれるキャリッジリターンを取り除く vendor_n=$(echo $(grep -i $vendor_c $OUIFILE | cut -f 3) | tr -d '\r') echo "$address $hwaddress ($vendor_n)" done < $tmpfile rm -r $tmpfile exit 0
スクリプトの実行には Organizationally Unique Identifier と呼ばれる,組織固有に割り当てられた MAC アドレスの前半部分と組織名とを関連づけるデータのファイルが必要で,あらかじめダウンロードしておく(ダウンロードには少々時間がかかる)
$ wget http://standards.ieee.org/develop/regauth/oui/oui.txt