WindowsでBSSIDをpythonを用いて取得

WindowsでBSSIDのリストをpythonを用いて取得します。
実行にはpywin32(http://pywin32.sourceforge.net/)が必要です。
Activeでない(=接続していない)BSSIDも取得できるようです。
とはいえ、どうもちゃんと全部は得られてないような気もします。要確認ですね。

なお、ssidなどは返ってくる値がtupleなので、getStrFromTuple()などの関数を作っています。
このあたりたぶんもっといいやり方があるのでしょうが初心者なぼくにはよく分からないのでこんな強引なやり方をしています。

    import win32com.client

    def getStrFromTuple(l):
        if l == None:
            return null
        s = ""
        for c in l:
            s = s + ("%c" %c)
        return s
    def getHexStrFromTuple(l):
        if l == None:
            return null
        s = ""
        for c in l:
        # How complicate this convert!!
            s = s + string.ljust(string.replace(hex(c), "0x", ""), 2, "0") + ":"
        return string.upper(s)[:-1] # return with cut the last ":"

    def getWiFiData(self):
        strComputer = "."
        objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
        objSWbemServices = objWMIService.ConnectServer(strComputer,"root\WMI")
        colItems = objSWbemServices.ExecQuery("SELECT * FROM MSNdis_80211_BSSIList")
        for objItem in colItems:
            list =  objItem.Ndis80211BSSIList
            for s in list: # <- MSNdis_80211_WLanBssId
                if (s.Ndis80211Rssi > -10 or s.Ndis80211Rssi < -200):
                    # skip an item which has invalid RSSI value
                    continue
                print "Ndis80211SsId: %s" % getStrFromTuple(s.Ndis80211SsId)[:s.Ndis80211SsIdLength]
                print "Ndis80211SsIdLength: %d" % s.Ndis80211SsIdLength
                print "Ndis80211MacAddress: %s" % s.getHexStrFromTuple(s.Ndis80211MacAddress)
                print "Ndis80211Rssi: %d" % s.Ndis80211Rssi
                print "Ndis80211WLanBssIdLength: %d" % s.Ndis80211WLanBssIdLength
                print "Ndis80211Privacy: %d" % s.Ndis80211Privacy

なお、Ndisの変数名などは、コマンドラインから"wbemtest"を起動し、queryを"SELECT * FROM MSNdis_80211_BSSIList"などとしてそこからたどって取得しました。