Помощь со скриптами

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
keyrus
Сообщения: 28
Зарегистрирован: 22 июн 2020, 10:34
Откуда: Харьков

Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета

/ip firewall filter add action=add-src-to-address-list address-list=test address-list-timeout=5h chain=input packet-size=1000 protocol=icmp in-interface=ether1

Возможно ли отправлять сообщение в телеграм при добавлении новых адресов в адрес лист?
скрипт отправления в телегу есть

/tool fetch url="https://api.telegram.org/botХХХХХХХХХ:х ... ew_address"


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета

/ip firewall filter add action=add-src-to-address-list address-list=test address-list-timeout=5h chain=input packet-size=1000 protocol=icmp in-interface=ether1
Это не скрипт, а правило для /ip firewall filter

То, что Вы хотите, сделать можно, но думаю, это нельзя будет сделать при добавлении каждого нового адреса. Скрипт, анализирующий записи в Вашем адрес-листе test будет помещен в планировщик и в любом случае выполняться раз в N-время. Он сможет проверить имеющиеся записи в этом листе и допустим сравнить их с записями, которые были при предыдущим запуске (которые скрипт будет хранить в массиве или другом адрес-листе). Если в течении времени N в адрес-лист будет добавлена не одна, а несколько записей - все они будут пересланы Вам в Телеграмм. Но по одной (т.е. при появлении каждой новой записи) это представляется малореальным, т.к. кто его знает какая частота добавления записей этих в Ваш адрес-лист ? Если записи добавляются не часто - будет работать нормально. А может это адрес-лист адресов брутфорса Вашего тика, когда к Вам ломятся за одну секунду с огромного числа адресов ? Тогда и массива может не хватить и памяти для заполнения такого листа да и скорости роутера тоже.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
keyrus
Сообщения: 28
Зарегистрирован: 22 июн 2020, 10:34
Откуда: Харьков

Sertik писал(а): 22 июн 2020, 12:24
Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета

/ip firewall filter add action=add-src-to-address-list address-list=test address-list-timeout=5h chain=input packet-size=1000 protocol=icmp in-interface=ether1
Это не скрипт, а правило для /ip firewall filter
Да перепутал малость.
Собственно список адресов не большой и добавляются туда адреса очень редко, хотелось бы мониторить этот процес.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Чтобы не хранить ip уже добавленные в Ваш адрес лист где-то в массиве или еще где дабы отличать новый добавляемый от имеющихся в листе, я бы предложил наверное следущий алгоритм работы нужного Вам скрипта:

1. При старте роутера скрипт проходит циклом :foreich по всем записям Вашего адрес-листа test и всем записям присваивает какой-то один комментарий, например "old". Это делается только при старте роутера и при первом выполнении скрипта (технически это можно)
2. При втором и последующих запусках скрипт смотрит не появилась ли в адрес-листе запись (адрес) без комментария ? (то есть добавленная Вашим правилом для /ip firewall filter ...
Если такая (такие) записи найдены - сообщаем о них в телеграмм и ставим им комментарий "old" (чтобы при новом запуске скрипт уже не обращал на них никакого внимания. Как-то так.

Это алгоритм. Он простой. Попробуйте сами. Вот в помощь ссылка на полезные строки кода для работы с адрес-листами:

http://iocsha.ddns.net/news/89/1331/


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Скрипт ставим в Шедуллер с нужной переодичностью
имя адрес листа и комментарий поставите свои

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

:local listaddress [:toarray ""]
:local myaddresslist "test"
:local mycomment "old"

:foreach i in=[/ip firewall address-list find where list=$myaddresslist] do={:if ([:len [/ip firewall address-list get $i comment]]=0) do={
:set listaddress [:put ($listaddress, [/ip firewall address-list get $i address])]
/ip firewall address-list set $i comment=$mycomment}};

# получаем массив из добавленных между срабатыванием скрипта адресов
:log info $listaddress
# количество добавленных адресов если надо
:log info [:len $listaddress]

# тут вставите отправку сообщения в Вашу телегу
собственно почти всё, Вам остается подшлифовать и сделать при первом запуске скрипта чтобы он всем уже имеющимся адресам в Вашем адрес-листе поставил комментарий "old". Если же у Вас динамический адрес-лист (а он наверняка такой), то при старте роутера он всегда будет пустой, т.к. при перезагрузке динамические адрес-листы стираются из памяти (то есть даже этого Вам делать не нужно).
Скрипт сделан за Вас (кстати проверен, мне исправно шлет через lte-модем, в том числе когда за время между исполнением скрипта добавляется не один, а несколько адресов. Ну адресов не должно быть слишком много, а то будет превышена длина строки сообщения. У меня скрипт срабатывает раз в минуту. SMS ограничена 70 символов в сообщении кажется. Если больше пяти адресов за минуту не добавляется, то нормально всё укладывается в одно SMS типа так:

/tool sms send lte1 phone="+7905blabla message=("$[/system identity get name] $[/system clock get time] $[/system clock get date] add new address "."$[:tostr $listaddress]"." in list "."$myaddresslist")


В телеграмм наверное будет ограничение длины строки 255 символов, то есть ещё больше адресов может перечисляться в $[:tostr $listaddress]

Единственный момент, когда будете формировать сообщение не забудьте преобразовать массив $listaddress в строку вот так [:tostr $listaddress] иначе есть шанс наступить на интересный баг ! (кто знает, тот поймет)


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
keyrus
Сообщения: 28
Зарегистрирован: 22 июн 2020, 10:34
Откуда: Харьков

Sertik писал(а): 22 июн 2020, 12:24
Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета

/ip firewall filter add action=add-src-to-address-list address-list=test address-list-timeout=5h chain=input packet-size=1000 protocol=icmp in-interface=ether1
Это не скрипт, а правило для /ip firewall filter
Искал и не нашел как сделать так чтобы адреса добавлялись статически, это было бы на много удобнее


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

keyrus писал(а): 23 июн 2020, 11:20 Искал и не нашел как сделать так чтобы адреса добавлялись статически, это было бы на много удобнее
address-list-timeout=none-static


Telegram: @thexvo
keyrus
Сообщения: 28
Зарегистрирован: 22 июн 2020, 10:34
Откуда: Харьков

xvo писал(а): 23 июн 2020, 11:39
keyrus писал(а): 23 июн 2020, 11:20 Искал и не нашел как сделать так чтобы адреса добавлялись статически, это было бы на много удобнее
address-list-timeout=none-static
Мне вот интересно как люди с таким интеллектом как у меня до сих пор живы....

Все работает кроме небольшой баги о которой говорилось и которую смоделировал, ткните пожалуйста носом куда вставлять ту команду нужно.

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

:local listaddress [:toarray ""]
:local myaddresslist "test"
:local mycomment "old"

:foreach i in=[/ip firewall address-list find where list=$myaddresslist] do={:if ([:len [/ip firewall address-list get $i comment]]=0) do={
:set listaddress [:put ($listaddress, [/ip firewall address-list get $i address])]
/ip firewall address-list set $i comment=$mycomment}};

# получаем массив из добавленных между срабатыванием скрипта адресов
:log info $listaddress
# количество добавленных адресов если надо
:log info [:len $listaddress]

# тут вставите отправку сообщения в Вашу телегу
/tool fetch url="https://api.telegram.org/botxxxxxxxxx/sendMessage\?chat_id=-xxxxxxxx&text=$listaddress""


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

"Ту команду" - это то что я вам написал? Про статические записи?
Так это не команда, а один из атрибутов правила в firewall. Туда и "вставлять", на вкладке action.


Telegram: @thexvo
keyrus
Сообщения: 28
Зарегистрирован: 22 июн 2020, 10:34
Откуда: Харьков

xvo писал(а): 23 июн 2020, 14:27 "Ту команду" - это то что я вам написал? Про статические записи?
Так это не команда, а один из атрибутов правила в firewall. Туда и "вставлять", на вкладке action.
Sertik писал(а): 22 июн 2020, 22:38 Единственный момент, когда будете формировать сообщение не забудьте преобразовать массив $listaddress в строку вот так [:tostr $listaddress] иначе есть шанс наступить на интересный баг ! (кто знает, тот поймет)
Вот про эту, преобразование массива в строку


Ответить