2015-02-09 19 views
0

以下代碼將獲取所有接入點並顯示其SSID以及其Strength屬性。但是,我不知道這個屬性是如何編碼:如何使用Python獲得WLAN的信號強度?

import NetworkManager 
for dev in NetworkManager.NetworkManager.GetDevices(): 
    if dev.DeviceType != NetworkManager.NM_DEVICE_TYPE_WIFI: 
     continue 
    aps = [ap for ap in dev.SpecificDevice().GetAccessPoints()] 
    for ap in sorted(aps, key=lambda ap: ap.Ssid): 
     print(u"%s:: %s" % (ap.Ssid, ap.Strength.encode("unicode_escape"))) 

我得到的是這樣的:

blabla1:: 2 <- The strongest signal 
blabla2:: \x0c <- The weakest signal 
DarkRoom:: \x13 
FRITZ!Box 6340 Cable:: \n 
FRITZ!Box 6360 Cable:: \x0e 
FRITZ!Box 7272:: \x0c 
FRITZ!Box Fon WLAN 7270:: \t 
blabla3:: \x07 
blabla4:: \x11 
blabla5:: \x0c 
blabla6:: (
blabla7:: \x07 
blabla8:: \n 
teco:: \n 
wkit-802.1x:: \x14 
blabla9:: \t 

如何獲得有意義的值出來的呢?

+2

它可能(有可能?)它實際上是一個二進制值,而不是一個編碼的字符串。所以最強的是'50'和最弱的'12'。 – poke 2015-02-09 07:57:24

回答

2

嘗試更新您的python-networkmanager代碼。參觀它的github上,你可以看到,代碼是20天以前更新了紙條:「解碼的信號強度以整數」

你可以看到代碼的變化在這裏: https://github.com/seveas/python-networkmanager/commit/079ebfef92dec3d8ad49d9a5df1e569c68e3355a

的代碼中你有興趣(字節到整數轉換):

struct.unpack('B', strength)[0] 

注意,結果是一個元組,因此關於拆包字節串[0]更多信息可以在python文檔中找到:

https://docs.python.org/2/library/struct.html