一个openwrt无线踢人的脚本, 模拟ubnt的踢人,原理根据:iw dev wlan0 station del mac ,本想用openwrt里的sh脚本命令实现,但原来openwrt的sh的脚本命令是ash来的,实现起来麻烦,于是用lua脚本实现,操作非常方便.
废话不说,以下是脚本:
function split(s, delim)
if type(delim) ~= "string" or string.len(delim) <= 0 then
return
end
local start = 1
local t = {}
while true do
local pos = string.find (s, delim, start, true) -- plain find
if not pos then
break
end
table.insert (t, string.sub (s, start, pos - 1))
start = pos + string.len (delim)
end
table.insert (t, string.sub (s, start))
return t
end
local find = string.find
local sub = string.sub
function trim8(s)
local i1,i2 = find(s,'^%s*')
if i2 >= i1 then s = sub(s,i2+1) end
local i1,i2 = find(s,'%s*$')
if i2 >= i1 then s = sub(s,1,i1-1) end
return s
end
local ming = io.popen('iw dev | grep Interface | cut -f 2 -s -d" "')
local getstr = ming:read("*all")
local gg=""
aaa=split(getstr,"\n")
local shu=#aaa-1
for i=1,#aaa-1 do
cc=aaa[i]
gg=gg.."iw dev "..cc.." station dump;"
end
local mingling=gg
local t = io.popen(mingling)
local a = t:read("*all")
--print(a)
--astring= "----分割?--"
--print(astring)
aa=split(a,"TDLS peer")
for i=1,#aa-1 do
bb=aa[i]
cc = split(bb,"(on")
dd = cc[1]
ee = split(dd, "Station")
ff = trim8(ee[2])
--print(ff)
ii=find(bb, "[-",1,true)
if ii ~=nil then
cc2 = split(bb," [-")
else
cc2 = split(bb," dBm")
end
dd2 = split(cc2[1],"signal: ")
ee2 = trim8(dd2[2])
--print(ee2)
ee3 = tonumber(ee2)
ccc = split(bb, "wlan")
ddd = split(ccc[2],")")
eee = "wlan"..ddd[1]
--print(eee)
if ee3 < -81 then
datex=os.date("%Y-%m-%d %H:%M:%S");
print("ti ren: "..datex)
os.execute("iw dev "..eee.." station del "..ff)
print("iw dev "..eee.." Station del "..ff)
end
--print("----")
end
做成脚本,再定时任务哪里设置,每5分钟执行一次, 在任务里填写:
*/5 * * * * /usr/bin/lua /root/tiren.lua >>/tmp/dellist.txt &
现在是小于-81db就删掉,这样无线连接效果好很多。
另外想说的就是lua脚本操作起来还是很方便,容易上手呢。
其实也想根据这个原理在tomato哪里尝试,但找不到相关的命令,手上还是有tomato的路由。
楼主,这个脚本怎么执行,多谢。
放在openwrt的定时任务里,用lua执行这剧本
博主,这个脚本可否再优化下?我使用的情况:网络是断开了,但是信号还是一直连着!检测信号可否按秒来踢终端?
信号是连着的,这个确实,这个是del mac命令执行后的效果,没办法踢到它自动断线的,至于按秒来说,自己改哪个计划任务的命令,但每秒都执行,弱弱的路由器cpu占用会很高的,估计可能令cpu受不了,后果严重。