您的位置:首页 > 编程语言 > Python开发

DIY个人智能家庭网关—— python篇之获取手机WIFI连接(上线/下线)状态

2017-02-26 21:00 746 查看
如果需要根据自己的手机在连接或断开路由器WIFI时触发某个动作,可以通过iw命令定时查询手机的连接状态,执行如下命令可以列出所有连接到路由器WIFI的设备,

root@OpenWrt:~# iw dev wlan0 station dump
Station e0:ac:cb:b1:ca:ba (on wlan0)
inactive time:  27010 ms
rx bytes:       198087
rx packets:     1417
tx bytes:       843928
tx packets:     969
tx retries:     66
tx failed:      4
signal:         -70 dBm
signal avg:     -70 dBm
tx bitrate:     72.2 MBit/s MCS 7 short GI
rx bitrate:     24.0 MBit/s
expected throughput:    34.84Mbps
authorized:     yes
authenticated:  yes
preamble:       short
WMM/WME:        yes
MFP:            no
TDLS peer:      no
Station 04:52:f3:87:cf:77 (on wlan0)
inactive time:  620 ms
rx bytes:       316840
rx packets:     3260
tx bytes:       419569
tx packets:     1576
tx retries:     91
tx failed:      0
signal:         -78 dBm
signal avg:     -79 dBm
tx bitrate:     144.4 MBit/s MCS 15 short GI
rx bitrate:     24.0 MBit/s
expected throughput:    43.20Mbps
authorized:     yes
authenticated:  yes
preamble:       short
WMM/WME:        yes
MFP:            no
TDLS peer:      no
Station 94:94:26:9f:cc:fa (on wlan0)
inactive time:  25760 ms
rx bytes:       19497
rx packets:     312
tx bytes:       28507
tx packets:     137
tx retries:     1
tx failed:      0
signal:         -72 dBm
signal avg:     -71 dBm
tx bitrate:     57.8 MBit/s MCS 5 short GI
rx bitrate:     24.0 MBit/s
expected throughput:    30.29Mbps
authorized:     yes
authenticated:  yes
preamble:       short
WMM/WME:        yes
MFP:            no
TDLS peer:      no
Station b0:d5:9d:61:3a:1a (on wlan0)
inactive time:  280 ms
rx bytes:       92157
rx packets:     919
tx bytes:       73302
tx packets:     615
tx retries:     457
tx failed:      78
signal:         -84 dBm
signal avg:     -87 dBm
tx bitrate:     39.0 MBit/s MCS 4
rx bitrate:     58.5 MBit/s MCS 6
expected throughput:    23.180Mbps
authorized:     yes
authenticated:  yes
preamble:       short
WMM/WME:        yes
MFP:            no
TDLS peer:      no
Station a8:1b:5a:b7:e0:03 (on wlan0)
inactive time:  10750 ms
rx bytes:       106382
rx packets:     679
tx bytes:       97932
tx packets:     300
tx retries:     20
tx failed:      2
signal:         -54 dBm
signal avg:     -57 dBm
tx bitrate:     65.0 MBit/s MCS 7
rx bitrate:     6.0 MBit/s
expected throughput:    32.125Mbps
authorized:     yes
authenticated:  yes
preamble:       short
WMM/WME:        yes
MFP:            no
TDLS peer:      no


如果只要MAC地址,可以过滤一下

root@OpenWrt:~# iw dev wlan0 station dump | grep Station
Station e0:ac:cb:b1:ca:ba (on wlan0)
Station 04:52:f3:87:cf:77 (on wlan0)
Station 94:94:26:9f:cc:fa (on wlan0)
Station b0:d5:9d:61:3a:1a (on wlan0)
Station a8:1b:5a:b7:e0:03 (on wlan0)


和路由器页面上的一样



确定自己是哪一个MAC地址后则可以进一步进行过滤,如下



如果过滤后还有输出结果说明手机已经连上了路由器,没有输出结果说明手机没有连上路由器

如下是python代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import subprocess
from time import sleep

mac = "a8:1b:5a:b7:e0:03"

cmd = 'iw dev wlan0 station dump | grep Station'
while True:
obj = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
obj.wait()
state = 'offline'
lines = obj.stdout.readlines()
for str in lines:
if str.find(mac) > 0:
state = 'online'
break
print "phone %s %s"%(mac,state)
time.sleep(2)
运行输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: