Задумываюсь о динамическом "манглнинге" портов, чтобы ограничить использование P2P-клиентов, и нужно написать скрипт для динамического создания правил для Mangle chart, который бы отслеживал количество открытых соединений с порта. Например, Torrent Client использует порт 12565, и сидеры используют этот порт для соединения. Если на этом порту больше 10 соединений, скрипт должен помечать этот порт как p2p-порт и создавать правило для ограничения скорости пакетов, отправляемых/получаемых через этот порт в QueueTree. Может, кто-нибудь может помочь? Мой код выглядит так, ограничение работает нормально, но динамическое обнаружение порта очень медленное:
:local i "10000";
:local a "1";
:local b "0";
:local c "0";
:local d "0";
:local e "0";
:local max "65535";
:while ( $a <= 6 ) do={
:while ( $b <= 9 ) do={
:while ( $c <= 9 ) do={
:while ( $d <= 9 ) do={
:while ( $e <= 9 && $i <= $max ) do={
if ([ip firewall mangle find dst-port=$i] != "") do={} else={
if ([ip firewall connection print count-only where dst-address~$i]>10) do={
ip firewall mangle add chain=forward protocol=17 dst-port=$i action=mark-packet new-packet-mark=P2P_Download;
ip firewall mangle add chain=forward protocol=6 dst-port=$i action=mark-packet new-packet-mark=P2P_Download;
ip firewall mangle add chain=forward protocol=17 src-port=$i action=mark-packet new-packet-mark=P2P_Upload;
ip firewall mangle add chain=forward protocol=6 src-port=$i action=mark-packet new-packet-mark=P2P_Upload}};
:set i "$a$b$c$d$e";
:set e ($e + 1)};
:set e "0";
:set d ($d + 1)};
:set d "0";
:set c ($c + 1)};
:set c "0";
:set b ($b + 1)};
:set b "0";
:set a ($a + 1);
:log info "Port Scan DONE!"}
:local i "10000";
:local a "1";
:local b "0";
:local c "0";
:local d "0";
:local e "0";
:local max "65535";
:while ( $a <= 6 ) do={
:while ( $b <= 9 ) do={
:while ( $c <= 9 ) do={
:while ( $d <= 9 ) do={
:while ( $e <= 9 && $i <= $max ) do={
if ([ip firewall mangle find dst-port=$i] != "") do={} else={
if ([ip firewall connection print count-only where dst-address~$i]>10) do={
ip firewall mangle add chain=forward protocol=17 dst-port=$i action=mark-packet new-packet-mark=P2P_Download;
ip firewall mangle add chain=forward protocol=6 dst-port=$i action=mark-packet new-packet-mark=P2P_Download;
ip firewall mangle add chain=forward protocol=17 src-port=$i action=mark-packet new-packet-mark=P2P_Upload;
ip firewall mangle add chain=forward protocol=6 src-port=$i action=mark-packet new-packet-mark=P2P_Upload}};
:set i "$a$b$c$d$e";
:set e ($e + 1)};
:set e "0";
:set d ($d + 1)};
:set d "0";
:set c ($c + 1)};
:set c "0";
:set b ($b + 1)};
:set b "0";
:set a ($a + 1);
:log info "Port Scan DONE!"}