Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Команды if else в программировании сценариев.

    Команды if else в программировании сценариев.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Команды if else в программировании сценариев., RouterOS
     
    briane
    Guest
    #1
    0
    30.07.2010 14:32:00
    Привет, я новичок в скриптинге и у меня, как мне кажется, небольшая проблема. Псевдокод: если wlan1 включён, ничего не делать и выйти из скрипта, иначе включить wlan1 и выйти из скрипта. В общем, я не хочу просто каждый раз включать wlan1 при запуске скрипта, потому что если он уже включён, а скрипт снова его включает, связь пропадает примерно на 2 секунды из-за разрыва и повторного соединения. Спасибо, Брайан.
     
     
     
    EarthStation
    Guest
    #2
    0
    04.09.2010 09:09:00
    Привет! Хочу развить эту идею дальше… У меня есть команда Netwatch, которая выглядит так: /ip route set [find comment="Group B"] gateway=10.254.254.255; Мне хотелось бы, чтобы эта команда сначала проверяла, стоит ли у /ip route [find comment="Group B"] gateway=10.254.254.250, и если да — тогда выполнялась команда /ip route set [find comment="Group B"] gateway=10.254.254.255;, а если нет — ничего не делать. Это часть скрипта для балансировки нагрузки и аварийного переключения, два шлюза по умолчанию настроены на 10.254.254.250 (GroupA) и 10.254.254.255 (GroupB). И только если один из шлюзов падает, обе группы переключаются на оставшийся «открытый» шлюз. Спасибо, Brian (также briane на этом форуме).
     
     
     
    Chupaka
    Guest
    #3
    0
    04.09.2010 17:26:00
    :local gw;
    /ip route
    :foreach i in=[find] do={
     :set gw [get $i gateway];
     if ($gw = "10.254.254.250") do={
       set $i gateway=10.254.254.255;
     }
    } п.с. .255?..
     
     
     
    briane
    Guest
    #4
    0
    04.09.2010 20:14:00
    Спасибо, Chupaka. Может, я чего-то не понимаю, но это изменит любой gw с 250 на 255, тогда обе группы нагрузки пойдут через gw 255. Теперь их уже нельзя будет раздельно настроить, ведь они идентичны. Оба шлюза активны (балансировка нагрузки), если только один не выйдет из строя — тогда трафик с неработающего gw перенаправляется на оставшийся активный. Вот почему я думал, что проще искать по полю «Comment» или даже «routing mark»... Если изменения делаются только по IP шлюза, и они совпадают, разделить их уже не получится. Может, выбрать как поле выделения «routing mark»? Что я пытаюсь сделать через netwatch на GroupB: когда он поднимается после сбоя, скрипт должен проверить, стоит ли там 255 или 250. Если 255 — ничего не менять, если 250 и netwatch показывает «up», то поменять на 255. Надеюсь, теперь цель понятнее. Поясните, что значит «255?» ? Всё работает уже три месяца, может, это как-то влияет, о чём я не знаю? Спасибо и всего хорошего, Брайан.
     
     
     
    fewi
    Guest
    #5
    0
    04.09.2010 20:46:00
    Часто IP-адреса, заканчивающиеся на .255, являются широковещательными адресами и не могут использоваться как шлюзы. Ваш, возможно, подходит, так как мы не знаем маску подсети вашего IP-адреса в этой сети.
     
     
     
    briane
    Guest
    #6
    0
    05.09.2010 09:04:00
    Мои точки доступа настроены с IP-адресами, как показано на изображении ниже… Каждое клиентское устройство находится в своей отдельной сети (и с тем же широковещательным адресом), и на клиенте IP настроен с такой же сетью и широковещательным адресом, как и у точки доступа, то есть по сути у каждого клиента своя собственная сеть. 255 никогда не используется в беспроводной сети как общий широковещательный IP. Клиентское устройство, связанное с первым IP на изображении выше, имеет такие настройки для своих IP… С уважением, Брайан
     
     
     
    Chupaka
    Guest
    #7
    0
    05.09.2010 17:27:00
    Тогда используй :foreach i in=[find comment="Group B"] вместо :foreach i in=[find] Я же просто привёл пример =)
     
     
     
    mandobasha
    Guest
    #8
    0
    02.11.2014 03:58:00
    Мне нужна помощь с этим кодом:  
    :set datadown [/ip hotspot active get $counter bytes-out]
    :if ([/ip hotspot active get $counter bytes-out] = "0") do={
    Я просто хочу проверить, ограничен ли этот пользователь уже или нет, и если нет — автоматически его ограничить. Вот и всё.
     
     
     
    p3rad0x
    Guest
    #9
    0
    04.08.2016 10:35:00
    Привет, кто-нибудь может помочь сделать то же самое, но с default authenticate и forward? Если они включены — отключить, если нет — ничего не делать.
     
     
     
    p3rad0x
    Guest
    #10
    0
    04.08.2016 13:02:00
    Хорошо, я решил эту задачу без использования оператора if.  
    :foreach i in=[interface wireless find default-forwarding=yes] do={/interface wireless set $i default-forwarding=no}
    :foreach i in=[interface wireless find default-authentication=yes] do={/interface wireless set $i default-authentication=no}
    :foreach i in=[interface wireless find hide-ssid=no] do={/interface wireless set $i hide-ssid=yes}
     
     
     
    Chupaka
    Guest
    #11
    0
    04.08.2016 13:16:00
    Это должно сделать то же самое: /interface wireless set [find] default-forwarding=no default-authentication=no hide-ssid=yes
     
     
     
    p3rad0x
    Guest
    #12
    0
    10.08.2016 08:33:00
    Спасибо, столкнулся с другой проблемой. Когда пытаюсь добавить скрипт через терминал командой /system script add name=test source=":foreach i in=[interface wireless find default-forwarding=yes] do={/interface wireless set $i default-forwarding=no}", скрипт добавляется, но $i не вставляется, в итоге последняя часть выглядит так: do={/interface wireless set default-forwarding=no}. Почему $i теряется? Причина использования foreach в том, что в некоторых секторах несколько виртуальных точек доступа.
     
     
     
    p3rad0x
    Guest
    #13
    0
    10.08.2016 11:39:00
    Окей, проблема решена. Я просто вручную добавил скрипт, затем экспортировал конфиг в файл. Теперь всё работает на 100%.
     
     
     
    soheiliz
    Guest
    #14
    0
    10.08.2020 07:19:00
    Друзья, я пытаюсь использовать этот скрипт, чтобы проверить два параметра, но он просто выполняется без какого-либо действия.  
    :foreach i in=[ip firewall nat find action=masquerade chain=srcnat src-address-list=no dst-address-list=no] do={/ip firewall nat set src-address-list=AllowedSrc dst-address-list=AllowedDst}

    Я хочу проверить в моём NAT, если существуют «src-address-list» и «dst-address-list» — тогда ничего не делать. А если их нет и они не указаны, то добавить «src-address-list=AllowedSrc» и «dst-address-list=AllowedDst».  

    Буду очень благодарен, если кто-то поможет с этой проблемой.
     
     
     
    CZFan
    Guest
    #15
    0
    10.08.2020 08:19:00
    Я не несу никакой ответственности, так что обязательно сделайте резервную копию конфигурации перед этим!! Я не тестировал, но попробуйте выполнить в терминале после выполнения вышеуказанного:

    {
    :foreach i in=[ip firewall nat find where action="masquerade" && chain="srcnat" && src-address-list="no" && dst-address-list="no"]
    do={/ip firewall nat set src-address-list=AllowedSrc dst-address-list=AllowedDst}
    }
     
     
     
    soheiliz
    Guest
    #16
    0
    10.08.2020 10:15:00
    Дорогой CZFan, большое спасибо за ответ. К сожалению, это не решило проблему. Если я использую приведённый ниже скрипт, мне нужно указать номер, но я не могу, потому что у меня много роутеров Mikrotik с несколькими правилами NAT, и мне нужно добавить src и dst в списки адресов одним скриптом:

    if [/ip firewall nat find action=masquerade chain=srcnat] do={/ip firewall nat set src-address-list="AllowedSrc" dst-address-list="AllowedDst"}

    С наилучшими пожеланиями,
     
     
     
    msatter
    Guest
    #17
    0
    10.08.2020 11:07:00
    {
    /ip firewall nat
    set [find action=masquerade chain=srcnat] src-address-list="AllowedSrc" dst-address-list="AllowedDst"
    } Мой вариант — пусть RouterOS сделает всю работу. Если dst/src адрес уже есть, то они будут перезаписаны новыми значениями. Если же вы хотите применить это только к тем строкам, где src-address-list не активен:
    {
    /ip firewall nat
    set [find action=masquerade chain=srcnat src-address-list=""] src-address-list="AllowedSrc" dst-address-list="AllowedDst"
    }
     
     
     
    soheiliz
    Guest
    #18
    0
    10.08.2020 11:28:00
    Дорогой msatter, БИНГО!!! Отличное решение и ответ. Огромное спасибо за твою идею. Она очень мне помогла. Но суть в том, что это устанавливает src-address-list=AllowedSrc и dst-address-list=AllowedDst для всех существующих NAT. У меня несколько NAT, и только один из них должен быть изменён. Я ищу что-то, что сравнивает и проверяет параметры, а в конце меняет их по моему усмотрению. С наилучшими пожеланиями,
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры