不可逆な毎日ブログ

2度と過ごすことのない毎日をつらつらと・・・

MACADDRESSを取得したい

Ohloh Code Search
Determining Ethernet HW Address - comp.lang.python | Google Groups
404 Not Found

[python-win32] detecting windows type

検索すると、上記サイトがひっかかり、できそうな感じ。
試しに、

import netbios

すると、

>>> from netbios import *
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named netbios

どうも、pyWin32モジュールをインストールする必要があるよう。
Win32 Extensions for Python
からダウンロード。

>>> import netbios
>>> help(netbios)
Help on module netbios:

NAME
    netbios

FILE
    c:\python25\lib\site-packages\win32\lib\netbios.py

import 成功。


FrontPage - py2exe.org
py2exeもインストールしておいた。


[python-win32] detecting windows type
このメーリングリストの投稿にあるものがそのまま使える感じだったので、使わせてもらった。

  • getmacs_winarp()
  • getmacs_ipconfig()
  • getmacs_wmi()

それぞれのメソッドで取得はできることを確認した。


wmi は、
404 Not Found
からダウンロードでき、サンプルも載っている。


ローカル接続1のMACADDRESSだけが欲しい場合は、どうすれば取得できるのだろうか。
決まっているのかな。

Win32_NetworkAdapterConfiguration の情報は、
Win32_NetworkAdapterConfiguration class (Windows)
にあるので、必要な情報はここで調べること。


確実か分からないけど、

>>> for list in c.Win32_NetworkAdapterConfiguration(IPEnabled=1):
...   print list.Caption
...
[00000008] Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller
[00000012] Bluetooth Personal Area Network
[00000016] VMware Virtual Ethernet Adapter for VMnet1
[00000017] VMware Virtual Ethernet Adapter for VMnet8

で、どうも、index が昇順に返って来るみたい。
最初のMACADDRESSが欲しいから、

def getmacs_wmi():
    """uses wmi interface to find mac addresses"""
    # this uses wmi from http://tgolden.sc.sabren.com/python/wmi.html
    # its from the example at http://tgolden.sc.sabren.com/python/wmi_cookbook.html#ip_addresses
    import wmi
    c = wmi.WMI ()
    for interface in c.Win32_NetworkAdapterConfiguration (IPEnabled=1):
        hasip = False
        for ipaddress in interface.IPAddress:
            if ipaddress: hasip = True
        if hasip:
            yield interface.MACAddress
        return

と、したけど大丈夫かな。
本番機で確認だ。