add src/dst to adress list

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

вроде так удаляет:

Код: Выделить всё

/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

могу ошибаться во всем, пока все путается, какой-то фаршмак из скобок разного вида, немного отвлекает нуба-новичка ...(((


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Да скобки в принципе просто:
() - действие
[] - выражение
{} - скрипт

Так и не догнал сегодня, как сделать записи статичными. Такая конструкция не работает:

Код: Выделить всё

{:foreach  i in [/ip firewall address-list find dynamic] do={/ip firewall address-list set $i  dynamic=no}}


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Так, я не знаю, как там было бы кошерно и красиво, у меня Ваша задача получалась только в несколько шагов. Сначала создание стороннего списка, затем удаление существующего и сразу переименование стороннего в нужное имя. Очень костыльно, зато покопался всласть :hi_hi_hi: ...

Код: Выделить всё

{: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, спасибо огромное товарищу за публикацию...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

podarok66 писал(а):Сначала создание стороннего списка, затем удаление существующего и сразу переименование стороннего в нужное имя
ага, держу такой вариант, если не получиться сделать с "одним списком", спасибо за готовый скрипт... :a_g_a:

podarok66 писал(а):[/ip firewall address-list find list=ssh_blacklist dynamic]
за это отдельный спасиб :-): а то думал на будущее, как искать сразу в нужном списке, а не по всем. :co_ol:


пока не могу догнать как вообще вытащить IP.
Если put $i еще выдает результат, то не пойму как сделать это

Код: Выделить всё

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


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну, если хотите видеть вывод адреса, можно попробовать в том же цикле добавить:

Код: Выделить всё

:local cikIP [get $i address];
:log info $cikIP;

Сам я результаты сейчас проверить не могу, я отъехал на пару дней, а удаленно с телефона - это извращение еще то.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

podarok66 писал(а):Сам я результаты сейчас проверить не могу, я отъехал на пару дней, а удаленно с телефона - это извращение еще то.

ок, спс, попробую, сам только к вечеру продолжу изучать эту волшебную коробочку :hi_hi_hi:


-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

не понимаю где я косячу...
почему:

Код: Выделить всё

: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]}
отрабатывает нормально...


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Давайте упорядочивать:

Код: Выделить всё

: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;}

Так будет кошернее, вроде бы. Завтра приеду, проверю...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-user-
Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

беда в том, что в этом же 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)...

либо я делаю что-то не правильно, либо нужно принять как должное такой факт работы скриптов в микротик и выкручиваться/приспосабливаться...


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Перво-наперво Ваша беда в слишком вольном обращении со скриптовым языком. Не сочтите за труд, попробуйте посидеть и почитать 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...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить