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"などとしてそこからたどって取得しました。