Страница 1 из 2
Помощь со скриптами
Добавлено: 22 июн 2020, 10:53
keyrus
Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета
/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"
Re: Помощь со скриптами
Добавлено: 22 июн 2020, 12:24
Sertik
Есть скрипт добавления адресов в адреслист если пингонуть нужной длинной пакета
/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 в адрес-лист будет добавлена не одна, а несколько записей - все они будут пересланы Вам в Телеграмм. Но по одной (т.е. при появлении каждой новой записи) это представляется малореальным, т.к. кто его знает какая частота добавления записей этих в Ваш адрес-лист ? Если записи добавляются не часто - будет работать нормально. А может это адрес-лист адресов брутфорса Вашего тика, когда к Вам ломятся за одну секунду с огромного числа адресов ? Тогда и массива может не хватить и памяти для заполнения такого листа да и скорости роутера тоже.
Re: Помощь со скриптами
Добавлено: 22 июн 2020, 13:26
keyrus
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
Да перепутал малость.
Собственно список адресов не большой и добавляются туда адреса очень редко, хотелось бы мониторить этот процес.
Re: Помощь со скриптами
Добавлено: 22 июн 2020, 19:44
Sertik
Чтобы не хранить ip уже добавленные в Ваш адрес лист где-то в массиве или еще где дабы отличать новый добавляемый от имеющихся в листе, я бы предложил наверное следущий алгоритм работы нужного Вам скрипта:
1. При старте роутера скрипт проходит циклом :foreich по всем записям Вашего адрес-листа test и всем записям присваивает какой-то один комментарий, например "old". Это делается только при старте роутера и при первом выполнении скрипта (технически это можно)
2. При втором и последующих запусках скрипт смотрит не появилась ли в адрес-листе запись (адрес) без комментария ? (то есть добавленная Вашим правилом для /ip firewall filter ...
Если такая (такие) записи найдены - сообщаем о них в телеграмм и ставим им комментарий "old" (чтобы при новом запуске скрипт уже не обращал на них никакого внимания. Как-то так.
Это алгоритм. Он простой. Попробуйте сами. Вот в помощь ссылка на полезные строки кода для работы с адрес-листами:
http://iocsha.ddns.net/news/89/1331/
Re: Помощь со скриптами
Добавлено: 22 июн 2020, 22:38
Sertik
Скрипт ставим в Шедуллер с нужной переодичностью
имя адрес листа и комментарий поставите свои
Код: Выделить всё
: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] иначе есть шанс наступить на интересный баг ! (кто знает, тот поймет)
Re: Помощь со скриптами
Добавлено: 23 июн 2020, 11:20
keyrus
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
Искал и не нашел как сделать так чтобы адреса добавлялись статически, это было бы на много удобнее
Re: Помощь со скриптами
Добавлено: 23 июн 2020, 11:39
xvo
keyrus писал(а): ↑23 июн 2020, 11:20
Искал и не нашел как сделать так чтобы адреса добавлялись статически, это было бы на много удобнее
address-list-timeout=none-static
Re: Помощь со скриптами
Добавлено: 23 июн 2020, 14:19
keyrus
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""
Re: Помощь со скриптами
Добавлено: 23 июн 2020, 14:27
xvo
"Ту команду" - это то что я вам написал? Про статические записи?
Так это не команда, а один из атрибутов правила в firewall. Туда и "вставлять", на вкладке action.
Re: Помощь со скриптами
Добавлено: 23 июн 2020, 14:46
keyrus
xvo писал(а): ↑23 июн 2020, 14:27
"Ту команду" - это то что я вам написал? Про статические записи?
Так это не команда, а один из атрибутов правила в firewall. Туда и "вставлять", на вкладке action.
Sertik писал(а): ↑22 июн 2020, 22:38
Единственный момент, когда будете формировать сообщение не забудьте преобразовать массив $listaddress в строку вот так [:tostr $listaddress] иначе есть шанс наступить на интересный баг ! (кто знает, тот поймет)
Вот про эту, преобразование массива в строку