|
本帖最后由 mylsmt 于 2022-1-11 17:06 编辑
想要一个限制某个IP或者mac地址单次上网固定时长的功能
效果是设定好了参数后
不论指定设备从何时开始联网 到达固定的时间就会断开网络 断开指定时间之后又可以联网
一直没看到这个功能 不知道有没有大神能搞定 啥路由系统支持都行
论坛没有找到这个功能 可能我这个功能比较小众 但是对于家里有小孩的来说 这样操作还是比较方便的 大人无需干预了
现在自己东拼西凑写了个脚本 在我的老毛子上测试可以执行 其余路由系统未测试 现在的操作流程是手动启动脚本 或者添加到开机自启即可
脚本会一直执行 关的话要手动kill进程(反正我也不关)
分享出来有需要的可以研究改造
转载注明来源,别据为己有啊
附上执行日志 自我感觉良好
start 18:07:16 29 Nov 2021
offline 18:07:35 29 Nov 2021
start 18:09:35 29 Nov 2021
offline 18:09:54 29 Nov 2021
start 18:11:54 29 Nov 2021
disconnection 18:42:03 29 Nov 2021
connection 19:12:03 29 Nov 2021
start 19:14:03 29 Nov 2021
offline 19:14:22 29 Nov 2021
start 19:16:22 29 Nov 2021
offline 19:16:41 29 Nov 2021
#!/bin/sh
date | sed -n 1p | awk '{print "start " $4,$3,$2,$6 }' >>/tmp/dw.log
#输出添加日志到/tmp/dw.log 观察脚本执行情况 日志尚未自动清理 一天大概50KB左右 缓存小的机器建议计划任务清理 或者去掉日志这几行
olinestatus=`ping -q 192.168.123.211 -c 10 | sed -n '4p' | awk '{print $4}'`
#ping指定IP地址10次 获得接收返回包数值 将数值设定成变量
if [ "$olinestatus" -gt "6" ]
#判断是否收ping通是否超过6次 (视网络情况自行修改)
then
#ping通6次以上后执行下面的命令
sleep 30m
#睡眠30分钟后续集下一步动作 时间自行修改
iptables -I FORWARD -s 192.168.123.211/32 -j DROP
#将指定ip加入到防火墙黑名单 断开网络
date | sed -n 1p | awk '{print "disconnection " $4,$3,$2,$6 }' >>/tmp/dw.log
#输出日志
sleep 30m
#继续睡眠30分钟
iptables -D FORWARD -s 192.168.123.211/32 -j DROP
#移除禁止联网的IP 恢复网络
date | sed -n 1p | awk '{print "connection " $4,$3,$2,$6 }' >>/tmp/dw.log
#输出日志
sleep 2m
sh /etc/storage/dw.sh
#循环执行脚本 脚本为绝对路径 自行修改 (如放到/etc/storage/dw.sh则无需修改)
exit
else
#没有ping通6次以上后执行下面的命令
date | sed -n 1p | awk '{print "offline " $4,$3,$2,$6 }' >>/tmp/dw.log
#输出日志
sleep 2m
sh /etc/storage/dw.sh
#循环执行脚本 脚本为绝对路径 自行修改
exit
fi
上面的脚本执行之后会导致子进程越来越多,而主进程没有完全结束,最终的结果就是路由器的ram空间耗尽,cpu飙升
又修改了如下的脚本,没有问题了,而且只要一个脚本,设置成开机自启就行了
#
duanwang()
{
date | sed -n 1p | awk '{print "start " $4,$3,$2,$6 }' >>/tmp/dw.log
olinestatus=`ping -q 192.168.123.211 -c 10 | sed -n '4p' | awk '{print $4}'`
if [ "$olinestatus" -gt "6" ]
then
sleep 30m
iptables -I FORWARD -s 192.168.123.211/32 -j DROP
date | sed -n 1p | awk '{print "disconnection " $4,$3,$2,$6 }' >>/tmp/dw.log
sleep 25m
iptables -D FORWARD -s 192.168.123.211/32 -j DROP
date | sed -n 1p | awk '{print "connection " $4,$3,$2,$6 }' >>/tmp/dw.log
sleep 1m
else
date | sed -n 1p | awk '{print "offline " $4,$3,$2,$6 }' >>/tmp/dw.log
sleep 1m
fi
}
while :
do
date | sed -n 1p | awk '{print "retry " $4,$3,$2,$6 }' >>/tmp/dw.log
sleep 1m
duanwang
done
|
|