找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4860|回复: 6

[脚本] msxo 发的 PPP及Hotspot用户期限操作1.03 ROS 5.16中hotspot不能用

[复制链接]
头像被屏蔽
发表于 2012-6-3 00:48:24 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
routeros
发表于 2012-6-3 10:24:04 | 显示全部楼层
只会粘贴是没法用这个脚本的,
:if ($CToday < $Today) do={:if (![get $i disabled ]) do={disable $i;/ip hotspot active remove [find name=$usname]}} else={:if ([get $i disabled ]) do={enable $i}}
#:if (($CToday-5) < $Today) do={执行的操作…}
具体操作要自己加进去的。
routeros
回复

使用道具 举报

头像被屏蔽
 楼主| 发表于 2012-6-3 11:00:30 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
routeros
回复

使用道具 举报

发表于 2012-6-3 16:35:15 | 显示全部楼层
5.15可用
  1. # 脚本作者: Mxso
  2. # Email: mxsogm@gmail.com
  3. # QQ/TM: 84046811
  4. # 脚本版本: 1.02 (真正意义上的日期对比)
  5. # 版本日期: 2010年4月4日
  6. # 适用系统: RouterOS 3.x - 4.6 (2.x未测试)
  7. # 脚本功能: 对PPP及Hotspot用户期限操作;此脚本的实例对用户状态(禁用/启用)进行设置及剔除到期在线用户,添加其他功能可参考下面例子
  8. # 其他功能: 通过注释添加system scheduler星期制的禁用启用,注释格式:[7位布尔值]第一位是星期日,第二位是星期一,以此类推,E为启用,D为禁用
  9. # 例:[EDDDDDE]代表只有周六日启用该scheduler,[DEEEEED]这个刚好相反,只有星期一至五启用该scheduler;
  10. # 注意:被设置状态(启用/禁用)的scheduler运行时间不能调整到刚好00:00:00,因为00:00:00刚好在执行此脚本,未能00:00:00就设置好状态

  11. # 添加用户注释日期格式:
  12. # 例1:"张三[20100608]到期"(双引号里面为注释内容,[]里面为日期八位数字),
  13. # 例2:"李四[+365]到期",[+365]指当前日期加365天,在下次调用脚本时注释将自动变为"李四[八位当前日期+365]到期",
  14. # 假设当前日期为2010年4月4日立即调用脚本注释内容将变为"李四[20100404+365]到期",也就是2010年4月4日的365天后到期
  15. # 例3:支持累加运算,假设[20090501+365]将近到期,用户续费可以在后面添加+X天,[20090501+365+180]这里加180天

  16. #获取公元至今日( $Today 变量为公元至今已过的天数)
  17. :local Date [/system clock get date];:local Year ([:pick $Date 7 11]-1)
  18. :local Month ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $Date 0 3]])
  19. :local Day [:pick $Date 4 6];:if ([:pick $Date 4 5] = 0) do={:set Day [:pick $Date 5 6]};:set Day ($Day-1)
  20. :local leapyear 0,31,59,90,120,151,181,212,243,273,304,334,0,31,60,91,121,152,182,213,244,274,305,335
  21. :global Today ($Year*365+$Year/4);:if (($Year-$Year/4*4) != 3) do={:set Today ($Today+[:pick $leapyear $Month]+$Day)} else={:set Today ($Today+[:pick $leapyear ($Month+12)]+$Day)}

  22. :local Ccomment;:local lc;:local rc;:local Exp;:local js;:local pcl;:local CYear;:local CMonth;:local CDay;:local CToday

  23. #利用公元天数计算今天是星期几,0代表星期日
  24. :global Week ($Today-$Today/7*7)
  25. :log info ("今天是星期" . $Week)

  26. #以下处理scheduler脚本
  27. /system scheduler
  28. :foreach i in=[find comment!="" name!="ExpAuto"] do={
  29. :set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  30. :if ([:typeof $lc]="num" && [:typeof $rc]="num" && ($lc+1+$Week)<$rc) do={
  31. :set Exp [:pick $Ccomment ($lc+1+$Week)]
  32. :if ($Exp="e"||$Exp="E"||$Exp="1") do={:if ([get $i disabled ]) do={enable $i}}
  33. :if ($Exp="d"||$Exp="D"||$Exp="0") do={:if (![get $i disabled ]) do={disable $i}}
  34. }}

  35. #以下处理PPP脚本
  36. #/ppp secret
  37. #:foreach i in=[find comment!=""] do={
  38. #:set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  39. #:if ([:typeof $lc]="num" && [:typeof $rc]="num" && $lc<$rc) do={
  40. #:set Exp [:pick $Ccomment ($lc+1) $rc];:set js 0;:set pcl;:set CYear;:set CMonth;:set CDay;:set CToday 0
  41. #:if ([:pick $Exp 0 1]!="+" && [:len $Exp]>7 && [:typeof [:tonum [:pick $Exp 0 8]]]="num") do={
  42. #:set CYear ([:pick $Exp 0 4]-1);:set CToday ($CYear*365+$CYear /4)
  43. #:set CMonth [:pick $Exp 4 6];:if ([:pick $Exp 4 5] = 0) do={ :set CMonth [:pick $Exp 5 6]};:set CMonth ($CMonth-1)
  44. #:set CDay [:pick $Exp 6 8];:if ([:pick $Exp 6 7] = 0) do={ :set CDay [:pick $Exp 7 8]};:set CDay ($CDay-1)
  45. #:if (($CYear-$CYear/4*4) != 3) do={:set CToday ($CToday+[:pick $leapyear $CMonth]+$CDay)} else={:set CToday ($CToday+[:pick $leapyear ($CMonth+12)])}}
  46. #:set pcl [:find $Exp "+"];:if ([:typeof $pcl]="num" && ($pcl>7 || $pcl=0) && ([:len $Exp]-1)>$pcl) do={
  47. #:if ($pcl = 0) do={:set CToday $Today;:set CYear ($Year+1);:set CMonth ($Month+1);:set CDay ($Day+1)
  48. #:if ([:len $CMonth]<2) do={:set CMonth ("0" . $CMonth)};:if ([:len $CDay]<2) do={:set CDay ("0" . $CDay)}
  49. #set $i comment=([:pick $Ccomment 0 $lc] . "[" .($CYear . $CMonth . $CDay) . [:pick $Exp $pcl [:len $Exp]] . "]" . [:pick $Ccomment ($rc+1) [:len #$Ccomment]])}
  50. #:while ([:typeof [:find $Exp "+"]]="num") do={
  51. #:set Exp [:pick $Exp ($pcl+1) [:len $Exp]];:set pcl [:find $Exp "+"];:if ([:typeof $pcl]!="num") do={:set pcl [:len $Exp]}
  52. #:set js ($js+[:tonum [:pick $Exp 0 $pcl]])};:set CToday ($CToday+$js)}
  53. #本操作例子:设置PPP用户状态(禁用并剔除和启用)
  54. #:if ($CToday < $Today) do={:if (![get $i disabled ]) do={disable $i;/ppp active remove [/ppp active find name=[get $i name]]}} else={:if ([get $i #disabled ]) do={enable $i}}
  55. #根据需要可添加或替换对用户的操作,假设提前5天,则在条件:if (($CToday-5) < $Today) do={执行通知操作…}
  56. #:if (($CToday-5) < $Today) do={执行通知操作…}
  57. #
  58. #}}
  59. #
  60. #以下处理Hotspot脚本
  61. /ip hotspot user
  62. :foreach i in=[find comment!=""] do={
  63. :set Ccomment [get $i comment];:set lc [:find $Ccomment "["];:set rc [:find $Ccomment "]"]
  64. :if ([:typeof $lc]="num" && [:typeof $rc]="num" && $lc<$rc) do={
  65. :set Exp [:pick $Ccomment ($lc+1) $rc];:set js 0;:set pcl;:set CYear;:set CMonth;:set CDay;:set CToday 0
  66. :if ([:pick $Exp 0 1]!="+" && [:len $Exp]>7 && [:typeof [:tonum [:pick $Exp 0 8]]]="num") do={
  67. :set CYear ([:pick $Exp 0 4]-1);:set CToday ($CYear*365+$CYear /4)
  68. :set CMonth [:pick $Exp 4 6];:if ([:pick $Exp 4 5] = 0) do={ :set CMonth [:pick $Exp 5 6]};:set CMonth ($CMonth-1)
  69. :set CDay [:pick $Exp 6 8];:if ([:pick $Exp 6 7] = 0) do={ :set CDay [:pick $Exp 7 8]};:set CDay ($CDay-1)
  70. :if (($CYear-$CYear/4*4) != 3) do={:set CToday ($CToday+[:pick $leapyear $CMonth]+$CDay)} else={:set CToday ($CToday+[:pick $leapyear ($CMonth+12)])}}
  71. :set pcl [:find $Exp "+"];:if ([:typeof $pcl]="num" && ($pcl>7 || $pcl=0) && ([:len $Exp]-1)>$pcl) do={
  72. :if ($pcl = 0) do={:set CToday $Today;:set CYear ($Year+1);:set CMonth ($Month+1);:set CDay ($Day+1)
  73. :if ([:len $CMonth]<2) do={:set CMonth ("0" . $CMonth)};:if ([:len $CDay]<2) do={:set CDay ("0" . $CDay)}
  74. set $i comment=([:pick $Ccomment 0 $lc] . "[" .($CYear . $CMonth . $CDay) . [:pick $Exp $pcl [:len $Exp]] . "]" . [:pick $Ccomment ($rc+1) [:len $Ccomment]])}
  75. :while ([:typeof [:find $Exp "+"]]="num") do={
  76. :set Exp [:pick $Exp ($pcl+1) [:len $Exp]];:set pcl [:find $Exp "+"];:if ([:typeof $pcl]!="num") do={:set pcl [:len $Exp]}
  77. :set js ($js+[:tonum [:pick $Exp 0 $pcl]])};:set CToday ($CToday+$js)}
  78. #本操作例子:设置Hotspot用户状态(禁用并剔除和启用)
  79. :if ($CToday < $Today) do={:if (![get $i disabled ]) do={disable $i;/ip hotspot active remove [/ip hotspot active find name=[get $i name]]}} else={:if ([get $i disabled ]) do={enable $i}}
  80. #:if (($CToday-5) < $Today) do={执行的操作…}

  81. }}
复制代码

点评

你这个是旧版的,我说的是新版的,你这个是存在问题的  发表于 2012-6-3 17:17
routeros
回复

使用道具 举报

发表于 2012-6-3 17:37:34 | 显示全部楼层
这脚本我也测试过 也发过贴,这脚本HOT好像真不能用到期禁用,到期提示功能!
routeros
回复

使用道具 举报

头像被屏蔽
 楼主| 发表于 2012-6-4 10:13:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
routeros
回复

使用道具 举报

发表于 2012-6-30 23:27:21 | 显示全部楼层
你的问题解决了。看帖子:
http://bbs.routerclub.com/forum. ... id=60414&extra=
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-6-15 04:44 , Processed in 0.052420 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表