|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
今晚闲来无事,就顺便写一段脚本来实现前几天的一为坛友对 "pppoe用户限制时间上网"的要求
1,在system-->Scheduler里面建一规则,一分钟执行一次,如图
2,脚本如下
###############################################
#功能:指定拨号用户上网时间 只能指定一个时间段#
#用户列表,一用户写一行,可以用空格对齐,格式:用户帐号-起始时间-终止时间,\ 例如 test-hh:mm:ss-hh:mm:ss,\
:set STR "\
test - 8:30:00 - 12:30:00,\
abc - 9:00:00 - 22:30:00,\
"
###############################################
#当前时间
:set T [:totime [/sys clock get time]]
#逐行处理帐号参数
:foreach i in=$STR do={
# 除去参数中的空格
:while([:set j [:find $i " "]]>=0 || $j>=0) do={:set i ([:pick $i 0 $j] . [:pick $i ($j+1) [:len $i]])}
# 把参数分解成集合
:while([:set j [:find $i "-"]]>=0 || $j>=0) do={:set i ([:pick $i 0 $j] . "," . [:pick $i ($j+1) [:len $i]])}
# 分解取得各项参数
:set k 0; :set ZH ""; :set T1 00:00:00; :set T2 23:59:59
:foreach j in=$i do={
:set k ($k + 1)
:if($k=1) do={:set ZH $j}
:if($k=2) do={:set T1 [:totime $j]}
:if($k=3) do={:set T2 [:totime $j]}
}
# 判断参数的正确性
:set ok "yes"
:if($T1=[:nothing] || $T2=[:nothing]) do={:log error ($i . "时间表达错误"); :set ok "no"}
:set id ""; :set id [/ppp secret find name=$ZH]
:if($id="") do={:log error ("帐号" . $ZH . "不存在"); :set ok "no"}
# 参数正确的话继续
:if($ok="yes") do={
# 当前帐号的状态
:set stat [/ppp secret get $id disabled]
# 如果在开放时间段,没有打开的帐号,则打开该帐号
:if($T>=$T1 && $T<=$T2 && $stat=true) do={/ppp secret enable $id}
# 如果不在开放时间段,打开了的帐号,则关闭该帐号
:if(($T<$T1 || $T>$T2) && $stat=false) do={/ppp secret disable $id}
}
}
测试达到预期要求
在用户列表部分增加减少修改需要控制的帐号和时间就可以了,每个用户可以设置不同的时间段,但只能设置一个时间段,若须多个时间段的,则代码复杂很多,一分钟执行一次,效率不是很高,但设置简单具有一般性,如果时间段全部都是一样或者只有很少的几种时间段的话,可以为每个时间段设置一个调度,效率就高些。如果用户很多的话,比如成百上千,效率上这个方法基本就不太可行了,也许该用radius |
-
|