Рандомно выбрать адрес из списка адресов

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Ответить
kreotodr
Сообщения: 41
Зарегистрирован: 31 мар 2018, 10:05

Рандомно выбрать адрес из списка адресов

Сообщение kreotodr »

Всем добра!
Есть список адресов, к примеру, от 1-100
Стоит задача рандомно выбирать раз в сутки адрес из этого списка и вносить его в определенное поле. Как реализовать рандом, раз в сутки и внесение выбранного IP адреса с помощью скрипта я понимаю. Вопрос как выбрать по номеру (или как то иначе) случайный адрес из списка?
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Рандомно выбрать адрес из списка адресов

Сообщение Chupaka »

Приветствую.

Коротенький поиск приводит вот сюда, например:
https://forum.mikrotik.com/viewtopic.php?f=9&t=56933
https://forum.mikrotik.com/viewtopic.php?f=9&t=100868

Увы, встроенных функций не наблюдается.
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Рандомно выбрать адрес из списка адресов

Сообщение Chupaka »

Может, опишите ситуацию чуть подробнее, чтобы понятнее было, какие альтернативы предложить?
kreotodr
Сообщения: 41
Зарегистрирован: 31 мар 2018, 10:05

Re: Рандомно выбрать адрес из списка адресов

Сообщение kreotodr »

Смотрите, задача вроде оч.простая. :D
Но, я не могу понять, как взять определенный элемент из списка адресов.
Например у меня есть список адресов WhiteList из 25 элементов..

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

{
          :global RandomOrg "";
          /tool fetch url="https://www.random.org/integers/\?num=1&min=1&max=25&col=1&base=10&format=plain&rnd=new" keep-result=yes dst-path="pass.txt";
          delay 3;
          
          :global RandomOrg [/file get pass.txt contents];
          /file remove pass.txt;
          :put $RandomOrg;
          :log info $RandomOrg
}
Так я получу рандомный номер- nn. Суть вопроса. Как взять(присвоить) переменной этот nn номер элемента из списка WhiteList?
Посоветовали через массивы, но...
Если не сложно поясните что не корректно в конструкции?

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

global myarr [:toarray [/ip firewall address-list find list=VPN]]
put [pick $myarr 1]
выдает что то абсурдное *11e4a

в то время как первый элемент содержит:

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

address=198.50.183.71   comment=Canada_Montreal
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Рандомно выбрать адрес из списка адресов

Сообщение Chupaka »

Вы с чего взяли, что первый элемент содержит такое? Массив, возвращаемый командой find, содержит внутренние идентификаторы элементов (в формате "*<hex_id>"), что вы и видите.

Я тут слегка накропал, пока не увидел отредактированное ваше сообщение (обратите внимание, что у меня результат fetch не сохраняется в файл, поэтому не сношает диск роутера):

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

{
	:local r [/tool fetch url="https://www.random.org/integers/\?num=1&min=0&max=2&col=1&base=10&format=plain&rnd=new" as-value output=user];
	:local myarr {"a"; "bc"; "def"};
	:local r [:pick ($r->"data") 0 ([:len ($r->"data")]-1)];
	:put [:pick $myarr $r];
}
Чтобы по ID получить данные, сделайте

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

:put [/ip fi ad get "*11e4a" address]
kreotodr
Сообщения: 41
Зарегистрирован: 31 мар 2018, 10:05

Re: Рандомно выбрать адрес из списка адресов

Сообщение kreotodr »

СПАСИБО!
Все получилось...

Не подскажете?
Это баг или фича ROS 6.46.3

Простейший скрипт:

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

{
   /ip firewall nat disable 7;  
   :delay 2s;
   /ip firewall nat enable 7;  
}
Из консоли запускается, и делает то, что в нем. Если нажать на кнопку RUN Script ничего не происходит...

https://youtu.be/qVqtcGpntrM
Аватара пользователя
Chupaka
Сообщения: 3879
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск
Контактная информация:

Re: Рандомно выбрать адрес из списка адресов

Сообщение Chupaka »

Подскажу. "7" — это относительное понятие, которое зависит от предыдущего вызова print и может меняться в зависимости от его параметров. В скриптах его не надо использовать. Делайте что-то вроде

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

/ip fi nat disable [find comment="test me"]
Можно попробовать использовать те самые ID в виде "*тыц", но тоже шаткий путь...
kreotodr
Сообщения: 41
Зарегистрирован: 31 мар 2018, 10:05

Re: Рандомно выбрать адрес из списка адресов

Сообщение kreotodr »

Спасибо огромное!
Ответить