配色: 字号:
单IP动态限速
2012-04-12 | 阅:  转:  |  分享 
  
:globalIsRuntrue

#循环检测WAN口流量间隔秒数

:globalInvs5;

#循环检测WAN口流量次数

:globalChkTimes60

#初始限定的单IP下行带宽(1M)

:globalRxCurSet100000

#单IP最大下行带宽(10M)

:globalRxMaxRate1000000

#单IP最小下行带宽(50K)

:globalRxMinRate50000

#总下行流量上阀值(10M)

:globalRxUpSwRate10000000

#总下行流量下阀值(6M)

:globalRxDwSwRate6000000



#初始限定的单IP上行带宽(1.2M)

:globalTxCurSet1200000

#单IP最大上行带宽(200k)

:globalTxMaxRate200000

#单IP最小上行带宽(100K)

:globalTxMinRate100000

#总上行流量上阀值(10M)

:globalTxUpSwRate10000000

#总上行流量下阀值(6M)

:globalTxDwSwRate8000000



#合法用户地址列表名称

:globalListName"userlist"

#临时存放地址列表项的变量

:globalul

#临时存放地址的变量

:globaltadd

#临时的循环变量

:globali0

#检测的下行总流量合计

:globalRxCurRate0

#检测的上行总流量合计

:globalTxCurRate0

#临时存放总流量的变量

:globalCurRate0

#下行步进值

:globalRxStepRate0

#上行步进值

:globalTxStepRate0

#临时存放旧下行限定

:globalOldRxSet0

#临时存放旧上行限定

:globalOldTxSet0



:while($IsRun)do={



:if(($OldRxSet!=$RxCurSet)||($OldTxSet!=$TxCurSet))do={



:setRxStepRate($RxCurSet/3);

:setTxStepRate($TxCurSet/3);



:foreachulin=[/ipfirewalladdress-listfindlist=userlist]do={

:settadd[/ipfirewalladdress-listget$uladdress]

:if([:len[/queuesimplefindname=$tadd]]>0)do={

/queuesimpleset$taddtarget-addresses=[:tostr($tadd."/32")]\

limit-at=[:tostr($TxCurSet."/".$RxCurSet)]\

max-limit=[:tostr(($TxCurSet+$TxStepRate)."/".($RxCurSet+$RxStepRate))]\

burst-limit=[:tostr(($TxCurSet2)."/".($RxCurSet2))]\

burst-threshold=[:tostr(($TxCurSet-$TxStepRate)."/".($RxCurSet-$RxStepRate))]\

total-queue=ethernet-default\

burst-time=30/30

}else={

/queuesimpleaddname=$taddtarget-address=[:tostr($tadd."/32")]\

limit-at=[:tostr($TxCurSet."/".$RxCurSet)]\

max-limit=[:tostr(($TxCurSet+$TxStepRate)."/".($RxCurSet+$RxStepRate))]\

burst-limit=[:tostr(($TxCurSet2)."/".($RxCurSet2))]\

burst-threshold=[:tostr(($TxCurSet-$TxStepRate)."/".($RxCurSet-$RxStepRate))]\

total-queue=ethernet-default\

burst-time=30/30

}

}

}



:setRxCurRate0

:setTxCurRate0

:forifrom=1to=$ChkTimesdo={

/interfacemonitor-trafficWanoncedo={:setCurRate$"received-bits-per-second"

:setRxCurRate($RxCurRate+$CurRate)

/interfacemonitor-trafficWanoncedo={:setCurRate$"sent-bits-per-second"

:setTxCurRate($TxCurRate+$CurRate)

:delay$Invs

}

:setRxCurRate($RxCurRate/$ChkTimes)

:setTxCurRate($TxCurRate/$ChkTimes)



:setOldRxSet$RxCurSet

:setOldTxSet$TxCurSet



:if($RxCurRate<$RxDwSwRate)do={:setRxCurSet($RxCurSet+$RxStepRate);}

:if($RxCurRate>$RxUpSwRate)do={:setRxCurSet($RxCurSet-$RxStepRate);}

:if($TxCurRate<$TxDwSwRate)do={:setTxCurSet($TxCurSet+$TxStepRate);}

:if($TxCurRate>$TxUpSwRate)do={:setTxCurSet($TxCurSet-$TxStepRate);}



:if($RxCurSet<$RxMinRate)do={:setRxCurSet$RxMinRate;}

:if($RxCurSet>$RxMaxRate)do={:setRxCurSet$RxMaxRate;}

:if($TxCurSet<$TxMinRate)do={:setTxCurSet$TxMinRate;}

:if($TxCurSet>$TxMaxRate)do={:setTxCurSet$TxMaxRate;}

}
献花(0)
+1
(本文系shaguada首藏)