根据上网人数实时调整单IP限速值
我的是用2.9.27测试的,修改后为(我的AD是上行384K/下行1024K,用户最多同时在线12人)::set s 0
:set m 0
:foreach a in= do={:set s ($s+1)}
:foreach b in= do={:set m ($m+1)}
:if (($m<$s) || ($m>$s)) do={:foreach i in= do={/queue simple remove $i}
:foreach i in= do={:set ipad
:set macad
:set macname 新用户
:if ($macad=00:14:78:36:6C:01) do={:set macname 用户1}
:if ($macad=00:14:78:36:7C:02) do={:set macname 用户2}
:if ($macad=00:14:78:36:6C:02) do={:set macname 用户3}
:if ($macad=00:14:78:36:7C:03) do={:set macname 用户4}
:if ($macad=00:14:78:36:6C:03) do={:set macname 用户5}
:set at ((240 / $m *1000) . "/" (750 / $m *1000) . )
:set max ((380 / $m *1000) . "/" (1020 / $m *1000) . )
:set brlim ((640 / $m *1000) . "/" (1800 / $m *1000) . )
:set brold ((180 / $m *1000) . "/" (400 / $m *1000) . )
/queue sim add name=($macname) target-address=$ipad limit-at=$at max-limit=$max burst-limit=$brlim burst-threshold=$brold burst-time=30/30}}
然用根据流量开关,当大于好多就开启计划任务,低于好多就删除当前所有单IP限速规则并关闭计划任务。
另:删除当前所有单IP限速规则并关闭计划任务的脚本为:
:foreach w in= do={/system scheduler disable $w}
:foreach i in= do={/queue simple remove $i}
这里有个问题,就是遇到时ARP病毒时,怎么办,此时ARP是动态的,那个决定限速值的变量m,可不可在进行了ARP双绑的情况下,通过其他方法和脚本获得在线上网机器数量,这样在一个小型网络上就完美了。再有就是流量开关的关闭功能(即低于好多流量执行某某脚本)不是十分灵敏。
请大家多出点子。
[ 本帖最后由 txwwy 于 2007-10-4 12:39 编辑 ] 简单问题复杂化...垃圾脚本 这样的脚本很占CPU,最好不要在这里用循环语句 arp双绑后,通过设置防火墙规则列表,再根据列表的数量,确定m的值,又根据两次之间运行脚本的地址列表数量进行对比,如相同就不进行限速变更,如不同再重新根据最新的m值重新生成限速。至于cpu方面,我测试过了,在列表数相同的情况下,cpu没有什么负担,当然你也可以,把计划任务间隔时间调长一点,可以5分钟,或10分钟一次。
附图:
另:二楼的你有好方法,你厉害你讲一讲? 四人同时在线时: 支持:victory: 官方的文档里面好像有一个类似这样功能的脚本,不过是在queu tree里面做的 虽然不实用...还是支持一下。。。才几台机。随便一点无所谓 这确实不实用于网吧,网吧BT软件也少嘛。这个较实用于AD,特别是上行640K/下行8M的用户,带机数量较少的(40台或20台)的小区,用户环境较复杂,限速主要是限P2P等上传部分,但又考虑到充分利用带宽、简单限速较稳定和想上传文件(如发邮件)的用户,可利用清晨或午夜较少人上网时段进行。这里只是通过脚本得到了m值,利用它设限速值,设多少就看你自已的方案了。
[ 本帖最后由 lshzcb1 于 2007-10-5 09:22 编辑 ] 直接pcq不就完了,不需如此复杂 根据实时上网人数,直接调整单个IP的平均速度,pcq可以吗?
这个脚本的优点还在于:还可以容易的把某人排除在限速这外,不用动脚本。你可以在中有上传限速的情况下,根据流量开关再打开下载限速、关闭其中的一条或条都关闭。
[ 本帖最后由 lshzcb1 于 2007-10-5 17:46 编辑 ]
页:
[1]