如果需要根据自己的手机在连接或断开路由器WIFI时触发某个动作,可以通过iw命令定时查询手机的连接状态,执行如下命令可以列出所有连接到路由器WIFI的设备,
root@OpenWrt:~# iw dev wlan0 station dumpStation 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: noStation 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: noStation 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: noStation 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: noStation 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 StationStation 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 timeimport subprocessfrom time import sleepmac = "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)运行输出结果:
新闻热点
疑难解答