这种东西市面上 ubnt 好像是有,但不是主动禁止, openwrt 我非常确认在 broadcom,atheros,mtk 都可以用 shell 实现根据信号强度主动踢除。。。 openwrt 需要的工具应该在 hostap-utils 里,具体自己研究吧,上次笔记本挂了,硬盘里的资料都没取出来。。。
以前为 uap 写的主动踢除 atheros 芯片连接客户端
#!/bin/sh
#etc/persistent/
kick_dato.shcd /bin;mca-dump | grep -Eo ..\(\:..\){5} >/tmp/mac.lst
iwlist ath0 ap | grep -Eo ..\(\:..\){5} | tr A-Z a-z >/tmp/wmac.tmp
ifconfig | grep -Eo ..\(\:..\){5} | tr A-Z a-z >>/tmp/wmac.tmp
xcl=/tmp/wmac.tmp
_f=/tmp/mac.lst
if [ -e $xcl ] ; then
while read kmac ; do
sed -i -e "/${kmac}/d" $_f
done < $xcl;fi
>/tmp/bmac.lst #
mca-sta 00:00:00:00:00:00 > /dev/null
for i in $(cat /tmp/mac.lst); do signal=`grep -A8 "$i" /tmp/mca_dump.out | sed -n "/signal/p" |grep -o "[0-9]\+"`
if [ $signal -gt 80 ] ;then #设置 rssi 小于多少则条件成立
echo $i>>/tmp/bmac.lst #
for ath in `ls /proc/sys/net | grep ath` ; do iwpriv $ath addmac "$i";iwpriv ath0 kickmac "$i";done
echo "`(date +"%m/%d/%Y %T")` kickmac_$i signal_$signal" >> /tmp/log;fi;done
sleep 3 #;for ath in `ls /proc/sys/net | grep ath` ; do iwpriv $ath maccmd 3;done
for ath in `ls /proc/sys/net | grep ath` ; do for i in $(cat /tmp/bmac.lst);do iwpriv $ath delmac $i;done;done