メモ書き

自分が後で見直すためにつけている作業のメモ書きです.それ以上の意味はありません

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