Страница 1 из 2

Нужна помощь!

Добавлено: 28 июл 2020, 20:05
kertis
Добрый день. Нужен скрипт чтобы при появлении в адрес листе IP, этот IP отправлялся в Telegram. Спасибо заранее.

Re: Нужна помощь!

Добавлено: 28 июл 2020, 22:03
podarok66
Заявки подобного рода прошу оставлять в разделе Платные услуги.

Re: Нужна помощь!

Добавлено: 28 июл 2020, 22:06
Virtue
kertis писал(а): 28 июл 2020, 20:05 Добрый день. Нужен скрипт чтобы при появлении в адрес листе IP, этот IP отправлялся в Telegram. Спасибо заранее.
Вы про оповещение телеграм тему читали? Просто лучше будет поднять у себя скрипт оповещения, а затем уже добавлять любые скрипты которые при сработке пишут лог варнинг и соответственно это отправится в телеграм.

Re: Нужна помощь!

Добавлено: 28 июл 2020, 22:44
kertis
Virtue писал(а): 28 июл 2020, 22:06
kertis писал(а): 28 июл 2020, 20:05 Добрый день. Нужен скрипт чтобы при появлении в адрес листе IP, этот IP отправлялся в Telegram. Спасибо заранее.
Вы про оповещение телеграм тему читали? Просто лучше будет поднять у себя скрипт оповещения, а затем уже добавлять любые скрипты которые при сработке пишут лог варнинг и соответственно это отправится в телеграм.
Да читал, Есть такой скрипт.

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

:if ([:len [/ip firewall address-list find list=ХХХХХХ]] > 0) do={tool fetch url="https://api.telegram.org/botХХХХХХХХХХХ/sendMessage?chat_id=ХХХХХХХХ&text=ХХХХХ" dst-path=telegram.txt}
но мне нужно его модернизировать, что-бы в тексте сообщения он мне присылал IP который(е) нашёл в этом адрес-листе.

Re: Нужна помощь!

Добавлено: 28 июл 2020, 23:11
Virtue
kertis писал(а): 28 июл 2020, 22:44 нужно его модернизировать
вам же нужно чтобы отправлялись только новые айпи?.. тут нужно думать как составить именно такой механизм, чтобы обрабатывать только новые записи, а те, которые ранее отправлялись, чтоб игнорировались..

Re: Нужна помощь!

Добавлено: 28 июл 2020, 23:46
kertis
Virtue писал(а): 28 июл 2020, 23:11
kertis писал(а): 28 июл 2020, 22:44 нужно его модернизировать
вам же нужно чтобы отправлялись только новые айпи?.. тут нужно думать как составить именно такой механизм, чтобы обрабатывать только новые записи, а те, которые ранее отправлялись, чтоб игнорировались..
Нет, все IP которые туда попадают (в адрес-листе они находятся непродолжительное время)

Re: Нужна помощь!

Добавлено: 29 июл 2020, 05:17
Virtue
kertis писал(а): 28 июл 2020, 22:44 Нет
Раз так, то задача резко упрощается, нужно просто периодически отправлять весь список, для этого, как я уже писал, можно прикрутить скрипт оповещения телеграм + скрипт проверяющий наличие адресов в листе, который будет их писать в лог варнинг

Re: Нужна помощь!

Добавлено: 29 июл 2020, 08:11
kertis
Virtue писал(а): 29 июл 2020, 05:17
kertis писал(а): 28 июл 2020, 22:44 Нет
Раз так, то задача резко упрощается, нужно просто периодически отправлять весь список, для этого, как я уже писал, можно прикрутить скрипт оповещения телеграм + скрипт проверяющий наличие адресов в листе, который будет их писать в лог варнинг
Получается необходимо 2 действия, записать событие в лог, когда событие записано в лог, отправить этот лог в телегу? Я таким первый раз занимаюсь, помогите с направлением.

Re: Нужна помощь!

Добавлено: 29 июл 2020, 09:57
Sertik
Добрый день. Нужен скрипт чтобы при появлении в адрес листе IP, этот IP отправлялся в Telegram. Спасибо заранее.
Заявки подобного рода прошу оставлять в разделе Платные услуги.
Полностью поддерживаю модератора. :-)
Спасибо заранее
:-)

Ну а с направлением отчего же не помочь. Нужны два действия:

1. Создания правила в /firewall filter
2. Скрипт из двух-трех строк

:-)

Re: Нужна помощь!

Добавлено: 29 июл 2020, 11:21
kertis
Включил логирование в правиле, с префиксом ХХХХХХ, и использовал скрипт которым поделился turanskiy.ruslan на этом форуме.

Искал по префиксу

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

:local startBuf [:toarray [/log find message~”ХХХХХХ”]]
полный скрипт

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

# BEGIN SETUP
:local scheduleName "LogMikrotik"
local bot "XXXXXXX"
local ChatID "XXXXXXXX"
:local startBuf [:toarray [/log find message~"XXXXXXXXXXX"]]
:local removeThese {"telnet";"whatever string you want"}
# END SETUP

# warn if schedule does not exist
:if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
  /log warning "[LOGMON] ERROR: Schedule does not exist. Create schedule and edit script to match name"
}

# get last time
:local lastTime [/system scheduler get [find name="$scheduleName"] comment]
# for checking time of each log entry
:local currentTime
# log message
:local message
 
# final output
:local output

:local keepOutput false
# if lastTime is empty, set keepOutput to true
:if ([:len $lastTime] = 0) do={
  :set keepOutput true
}

:local counter 0
# loop through all log entries that have been found
:foreach i in=$startBuf do={
 
# loop through all removeThese array items
  :local keepLog true
  :foreach j in=$removeThese do={
#   if this log entry contains any of them, it will be ignored
    :if ([/log get $i message] ~ "$j") do={
      :set keepLog false
    }
  }
  :if ($keepLog = true) do={
   
   :set message [/log get $i message]

#   LOG DATE
#   depending on log date/time, the format may be different. 3 known formats
#   format of jan/01/2002 00:00:00 which shows up at unknown date/time. Using as default
    :set currentTime [ /log get $i time ]
#   format of 00:00:00 which shows up on current day's logs
   :if ([:len $currentTime] = 8 ) do={
     :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime)
    } else={
#     format of jan/01 00:00:00 which shows up on previous day's logs
     :if ([:len $currentTime] = 15 ) do={
        :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15])
      }
   }
    
#   if keepOutput is true, add this log entry to output
   :if ($keepOutput = true) do={
     :set output ($output.$currentTime." ".$message."\r\n")
   }

    :if ($currentTime = $lastTime) do={
     :set keepOutput true
     :set output ""
   }
  }
  :if ($counter = ([:len $startBuf]-1)) do={
   :if ($keepOutput = false) do={    
     :if ([:len $message] > 0) do={
        :set output ($output.$currentTime." ".$message."\r\n")
      }
    }
  }
  :set counter ($counter + 1)
}

if ([:len $output] > 0) do={
  /system scheduler set [find name="$scheduleName"] comment=$currentTime
  /tool fetch url="https://api.telegram.org/bot$bot/sendmessage?chat_id=$ChatID&text=MikroTik alert $currentTime : $output" keep-result=no;
}
Спасибо Virtue, что подсказал про логирование.