MACアドレス

MACアドレスを調べたい場合、UUIDの末尾48ビット部分を取るという方法があります。

import uuid
print '%012X' % uuid.getnote()

私はWi-Fiフィルタリング指定のためMACアドレスを調べようと思ったのですが、困ったことにノートPCだとこの方法はEthernet (LANポート) のMACアドレスしか表示しません。結局ifconfig、ipconfig、iwlistなどのコマンドを叩いて調べる羽目になりました。
まあuuidモジュールは一意なIDを作るのが目的なので、インタフェース指定がないのは仕方ないですが...
(ちなみにuuid.getnode()は、開発用のVMware環境でやると取れる値が毎回変わったりします...)
というわけで、Pythonから無線LANのインタフェースを指定してMACアドレスを取得できないものかと思っていろいろ調べてみましたが、

  • uuid.getnode()
  • fcntl.ioctl()
  • ifconfig -a etherの出力を解析
  • arp -aの出力を解析
  • ip linkの出力を解析 (Linux)
  • lanscan -aiの出力を解析 (HP-UX)
  • iwlistの出力を解析 (MacOSX)
  • ctypesでuuid_generate_timeを呼び出す
  • ctypesでUuidCreateSequentialを呼び出す (Windows)
  • netbiosモジュール

...
MACアドレスを取るのに統一的に取れる方法はない、てことだけ分かりました orz
ただこのままでは収拾つかないので、この中から一部だけ紹介することにします。
(編集中...ごめんなさい、時間切れのため12/25以降追記します。)