首页 > 编程 > Python > 正文

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

2019-11-06 09:30:41
字体:
来源:转载
供稿:网友

如果需要根据自己的手机在连接或断开路由器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)运行输出结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表