Страница 3 из 5
Re: add src/dst to adress list
Добавлено: 26 авг 2014, 20:51
-user-
вроде так удаляет:
Код: Выделить всё
/ip firewall address-list remove [find address=[get $i address]]
но проблема в том что после этого удаления... по адресу
get $i address уже ничего не будет, т.е. возможно придется ввести переменную в которую перед удалением вынести IP адресс из
get $i address а при добавлении IP уже использовать эту новую переменную, которая содержит текстовый вариант IP.
т.е. вот это естественно не работает, так как добавить IP уже не может, так как по адресу
get $i address пусто...
так же, наверное и не отработает
[get $i list], нужно будет заранее, вывести значение в переменную...
Код: Выделить всё
:foreach i in [/ip firewall address-list find dynamic] do={[/ip firewall address-list remove [find address=[get $i address]]] [/ip firewall address-list add address=[get $i address ] list=[get $i list ]]}
пока разбираюсь как в этих скриптах работают переменные и как их использовать/создавать/приравнивать внутри
foreach могу ошибаться во всем, пока все путается, какой-то фаршмак из скобок разного вида, немного отвлекает нуба-новичка ...(((
Re: add src/dst to adress list
Добавлено: 26 авг 2014, 21:23
podarok66
Да скобки в принципе просто:
() - действие
[] - выражение
{} - скрипт
Так и не догнал сегодня, как сделать записи статичными. Такая конструкция не работает:
Код: Выделить всё
{:foreach i in [/ip firewall address-list find dynamic] do={/ip firewall address-list set $i dynamic=no}}
Re: add src/dst to adress list
Добавлено: 26 авг 2014, 22:41
podarok66
Так, я не знаю, как там было бы кошерно и красиво, у меня Ваша задача получалась только в несколько шагов. Сначала создание стороннего списка, затем удаление существующего и сразу переименование стороннего в нужное имя. Очень костыльно, зато покопался всласть

...
Код: Выделить всё
{:foreach i in=[/ip firewall address-list find list=ssh_blacklist dynamic] do={/ip firewall address-list add address=[/ip firewall address-list get $i address ] list=("static-".[/ip firewall address-list get $i list]);
/ip firewall address-list remove $i;};
:foreach i in [/ip firewall address-list find] do={:if ([:find [/ip firewall address-list get $i list] "static-"]=0) do={/ip firewall address-list set $i list=ssh_blacklist}}}
Название адрес-листа вместо моего
ssh_blacklist подставляйте своё, то, под которым фигурирует нужный Вам список...
Пользовался
http://www.mironovs.com/network/mikroti ... rotik.html, спасибо огромное товарищу за публикацию...
Re: add src/dst to adress list
Добавлено: 27 авг 2014, 05:45
-user-
podarok66 писал(а):Сначала создание стороннего списка, затем удаление существующего и сразу переименование стороннего в нужное имя
ага, держу такой вариант, если не получиться сделать с "одним списком", спасибо за готовый скрипт...
podarok66 писал(а):[/ip firewall address-list find list=ssh_blacklist dynamic]
за это отдельный спасиб

а то думал на будущее, как искать сразу в нужном списке, а не по всем.
пока не могу догнать как вообще вытащить IP.
Если
put $i еще выдает результат, то не пойму как сделать это
Код: Выделить всё
:foreach i in [/ip firewall address-list find dynamic] do={put (get $i address)}
чтобы, хотя бы, увидеть вывод всех этих IP в терминале? у меня выводить пустые строки. Вроде результатом работы
[get $i address] должен быть IP адрес, а его бы, потом, отдать текстовой переменной, но не понимаю где "собака зарыта" (может скобки не те ставлю?

)

Re: add src/dst to adress list
Добавлено: 27 авг 2014, 07:07
podarok66
Ну, если хотите видеть вывод адреса, можно попробовать в том же цикле добавить:
Код: Выделить всё
:local cikIP [get $i address];
:log info $cikIP;
Сам я результаты сейчас проверить не могу, я отъехал на пару дней, а удаленно с телефона - это извращение еще то.
Re: add src/dst to adress list
Добавлено: 27 авг 2014, 08:00
-user-
podarok66 писал(а):Сам я результаты сейчас проверить не могу, я отъехал на пару дней, а удаленно с телефона - это извращение еще то.
ок, спс, попробую, сам только к вечеру продолжу изучать эту волшебную коробочку

Re: add src/dst to adress list
Добавлено: 27 авг 2014, 22:02
-user-
не понимаю где я косячу...
почему:
Код: Выделить всё
:foreach i in [/ip firewall address-list find list=TeamViewer dynamic] do={[local VarIP [/ip firewall address-list get $i address]] [/ip firewall address-list remove [find address=[get $i address]]] [put $VarIP]}
в
[put $VarIP] уже пусто?!?
не пойму логики...

куда/почему деваются данные из
$VarIPдля проверки, без
[/ip firewall address-list remove [find address=[get $i address]]] Код: Выделить всё
:foreach i in [/ip firewall address-list find list=TeamViewer dynamic] do={[local VarIP [/ip firewall address-list get $i address]] [put $VarIP]}
отрабатывает нормально...
Re: add src/dst to adress list
Добавлено: 28 авг 2014, 07:06
podarok66
Давайте упорядочивать:
Код: Выделить всё
:foreach i in [/ip firewall address-list find list=TeamViewer dynamic] do={:local VarIP [/ip firewall address-list get $i address];
:put $VarIP;
/ip firewall address-list remove $i;}
Так будет кошернее, вроде бы. Завтра приеду, проверю...
Re: add src/dst to adress list
Добавлено: 28 авг 2014, 07:18
-user-
беда в том, что в этом же
foreach...do=... после удаления динамической записи
[/ip firewall address-list remove [find address=[get $i address]]] нужно добавить тот же самый IP в тот же лист, но уже статически
[/ip firewall address-list add address=$VarIP list=$VarLIST ]т.е. вот вариант, на который я возлагал надежды:
Код: Выделить всё
:foreach i in [/ip firewall address-list find list=TeamViewer dynamic] do={[local VarIP [/ip firewall address-list get $i address]] [local VarLIST [/ip firewall address-list get $i list]] [/ip firewall address-list remove [find address=[get $i address]]] [/ip firewall address-list add address=$VarIP list=$VarLIST ]}
но он не отрабатывает, задуманную задачу

, так как после удаления динамической записи IP
[/ip firewall address-list remove [find address=[get $i address]]] в переменной $VarIP (которая не задействована никак при удалении и имеет на этот момент уже свои не связанные данные) почему-то становиться пусто, хотя в нее уже идет не адрес нахождения IP (
$i), а сам IP (
get $i address)...
либо я делаю что-то не правильно, либо нужно принять как должное такой факт работы скриптов в микротик и выкручиваться/приспосабливаться...
Re: add src/dst to adress list
Добавлено: 28 авг 2014, 07:41
podarok66
Перво-наперво Ваша беда в слишком вольном обращении со скриптовым языком. Не сочтите за труд, попробуйте посидеть и почитать
http://wiki.mikrotik.com/wiki/Manual:Scripting . Там не столь много информации, понять можно.
А то Ваши выкладки очень сложно просто разобрать, так Вы там изворачиваетесь.
Мысль Вашу я понял, можно попробовать что-то типа
Код: Выделить всё
:foreach i in [/ip firewall address-list find list=TeamViewer dynamic] do={:local VarIP [/ip firewall address-list get $i address];
:put $VarIP;
/ip firewall address-list remove $i;
/ip firewall address-list add address=$VarIP list=TeamViewer}
Хотя нужно смотреть, я повторюсь, мне пробовать у себя неудобно сейчас. Вполне возможно, что придется $VarIP изменять с помощью set...