找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 20187|回复: 41

[其它] NEW! PPP用户日期比较,页面通知!

  [复制链接]
发表于 2010-1-23 19:58:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 mxso 于 2010-1-24 16:07 编辑

以下脚本适用于已建立的PPP服务
脚本将应用PPP用户注释,不影响注释正常使用
添加“[日期8位数]”字段即参与比较,不添加“[日期8位数]”将不作比较
如只需6位日期须修改script部分代码第4行[:pick $Date 7 11]将7改为9,第7行([:len $temp ]>=10)将10改为8.即为6位日期“[100308]”10年3月8日

当获取到用户注释的日期小于系统日期将作页面通知并禁止访问其他网络.
当获取到用户注释的日期大于系统日期将当前用户设置回为正常上网//此功能尽管作用不大,如:到期用户续费,设置日期后,在下一次调用脚本时对当前续费用户开通上网.取决于调用脚本的间距时间



注释格式 “…[日期8位数]…”年月日
如“张三[20100308]到期”到2010年3月8日将对当前注释的用户操作
如“…[ega322sf]…” 不是数值将不作比较,脚本不对当前注释用户进行操作
如 “邻居李四”或空注释,将不作比较,脚本不对当前注释用户进行操作



思路:
到期用户拨号获取到的IP禁止访问其他网络,其网页请求转换到指定的ip,作为到期通知

以下代码不能照搬 X.X.X.1-X.X.X.254为禁止访问和页面跳转的IP段,请自己修改,X.X.X.X为到期通知的Web服务器IP端口80,PPP_Server 更改为你的本地IP或地址池
添加1个到期的IP地址池(Pool)expire_pool X.X.X.1-X.X.X.254 //到期的用户将分派这个地址段IP
  1. /ip pool add name=expire_pool ranges=X.X.X.1-X.X.X.254
复制代码
添加1个防火墙规则(Filter Rules)drop X.X.X.1-X.X.X.254 //禁止这个地址段的IP
  1. /ip firewall filter add action=drop chain=forward comment="禁止到期用户IP" disabled=no src-address=X.X.X.1-X.X.X.254
复制代码
添加1个NAT转换规则(NAT)dstnat X.X.X.1-X.X.X.254 //将这个地址段IP的Tcp 80(即web默认端口)请求跳到指定的IP地址,作为到期通知
  1. /ip firewall nat add action=dst-nat chain=dstnat comment="到期通知跳转" disabled=no dst-port=80 protocol=tcp src-address=X.X.X.1-X.X.X.254 to-addresses=X.X.X.X to-ports=80
复制代码
注意: X.X.X.X为到期通知的Web服务器IP端口80

添加1个为到期PPP规则(PPP Profiles)expire RemoteAddress=expire_pool //建立expire Profiles 将用户地址池(即Remote Address)指向刚建立的expire_pool地址池
  1. /ppp profile add change-tcp-mss=default comment="到期规则" local-address=PPP_Server name=expire-profiles remote-address=expire_pool
复制代码
注意 PPP_Server 更改为你的PPP服务IP或地址池!

补充:
设置时区和网络自动校时
  1. /system clock manual set time-zone=+08:00
  2. /system ntp client set enabled=yes mode=unicast primary-ntp=129.6.15.28 secondary-ntp=129.6.15.29
复制代码
下面代码保存到script,用scheduler设置每天至少调用一次
  1. :local Date [/system clock get date]
  2. :local Month ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $Date 0 3]]+1)
  3. :if ($Month<10) do={:set Month (0 . $Month)}
  4. :set Date ([:pick $Date 7 11] . $Month . [:pick $Date 4 6])
  5. :foreach i in=[/ppp secret find comment!=""] do={
  6. :local temp [/ppp secret get $i comment]
  7. :if ([:len $temp ]>=10) do={
  8. :if ([:tonum [:pick $temp ([:find $temp "["]+1) [:find $temp "]"]]] < $Date) do={
  9. :if ([/ppp secret get $i profile]!="expire-profiles") do={/ppp active remove [/ppp active find name=[/ppp secret get $i name]]}
  10. /ppp secret set $i profile=expire-profiles} else={
  11. :if ([/ppp secret get $i profile]="expire-profiles") do={/ppp active remove [/ppp active find name=[/ppp secret get $i name]]}
  12. /ppp secret set $i profile=default}}}
复制代码
routeros
发表于 2010-1-23 20:03:54 | 显示全部楼层
本帖最后由 47771885 于 2010-1-23 20:06 编辑

。。。不错啊 新意 不错 呵呵
routeros
回复

使用道具 举报

 楼主| 发表于 2010-1-23 20:04:47 | 显示全部楼层
本帖最后由 mxso 于 2010-1-24 16:08 编辑

如不需要页面通知,只需使用下面script不用建立地址池Pool,防火墙,NAT……
脚本将剔除并禁用到期用户,未到期用户将启用
  1. :local Date [/system clock get date]
  2. :local Month ([:find jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec [:pick $Date 0 3]]+1)
  3. :if ($Month<10) do={:set Month (0 . $Month)}
  4. :set Date ([:pick $Date 7 11] . $Month . [:pick $Date 4 6])
  5. :foreach i in=[/ppp secret find comment!=""] do={
  6. :local temp [/ppp secret get $i comment]
  7. :if ([:len $temp ]>=10) do={
  8. :if ([:tonum [:pick $temp ([:find $temp "["]+1) [:find $temp "]"]]] < $Date) do={
  9. /ppp secret disable $i
  10. /ppp active remove [/ppp active find name=[/ppp secret get $i name]]} else={/ppp secret enable $i}}}
复制代码
routeros
回复

使用道具 举报

 楼主| 发表于 2010-1-23 20:08:40 | 显示全部楼层
回复 2# 47771885


    谢谢
routeros
回复

使用道具 举报

发表于 2010-1-23 20:13:33 | 显示全部楼层
本帖最后由 47771885 于 2010-1-23 20:29 编辑
  1. 单模版

  2. :local ab {{"jan";"01"};{"feb";"02"};{"mar";"03"};{"apr";"04"};{"may";"05"};{"jun";"06"};{"jul";"07"};{"aug";"08"};{"sep";"09"};{"oct";"10"};{"nov";"11"};{"dec";"12"}};
  3. :local aa [:pick [/system clock get date] 9 11];
  4. :local bb [:pick [/system clock get date] 0 3];
  5. :local cc [:pick [/system clock get date] 4 6];
  6. :foreach i in=$ab do={:if ([:pick $i 0] = $bb) do={:set ab ($aa . [:pick $i 1] . $cc);}}

复制代码
就没你用的好
routeros
回复

使用道具 举报

发表于 2010-1-23 20:30:08 | 显示全部楼层
不用搞的太复杂,ros累
routeros
回复

使用道具 举报

发表于 2010-1-23 20:39:34 | 显示全部楼层
routeros
回复

使用道具 举报

 楼主| 发表于 2010-1-27 19:02:27 | 显示全部楼层
本帖最后由 mxso 于 2010-1-27 19:05 编辑

这么快就沉底了,不会这么不值吧!

以上脚本存在日期对比缺陷,例如 2010年5月1号到期,但要在前3天提示用户快到期如需继续使用请续费,
这问题就来了,20100501-3=20100498,也就是2010年4月98日,日历上面没有98号。

但如果不做提示不会有问题。

此问题已解决并在下版本发布
routeros
回复

使用道具 举报

发表于 2010-2-19 13:17:02 | 显示全部楼层
又学习一下了,改天试试
routeros
回复

使用道具 举报

发表于 2010-2-19 14:22:10 | 显示全部楼层
好贴。
routeros
回复

使用道具 举报

发表于 2010-2-23 19:40:18 | 显示全部楼层
期待新版本
routeros
回复

使用道具 举报

发表于 2010-3-6 20:49:52 | 显示全部楼层
顶上去!支持!
routeros
回复

使用道具 举报

发表于 2010-3-9 17:06:23 | 显示全部楼层
很好
routeros
回复

使用道具 举报

发表于 2010-3-9 17:41:07 | 显示全部楼层
好东西 !!新概念
routeros
回复

使用道具 举报

发表于 2010-3-11 00:55:39 | 显示全部楼层
新版才是硬道理
routeros
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 21:23 , Processed in 0.095764 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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