Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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
    удалить список адресов старше 7 дней

    удалить список адресов старше 7 дней

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    удалить список адресов старше 7 дней, RouterOS
     
    aleab
    Guest
    #1
    0
    19.04.2020 17:16:00
    Могу ли я настроить скрипт, который будет удалять все элементы старше 7 дней в определённом списке адресов? Спасибо.
     
     
     
    jvanhambelgium
    Guest
    #2
    0
    16.01.2022 22:02:00
    Просто добавьте значение в поле "timeout" ?? Например, в /ip/firewall/list можно "добавить", как add address=X.X.X.X list=mylist timeout= Это значение может быть: 5s, 5m, 3h, 7d и так далее.
     
     
     
    aleab
    Guest
    #3
    0
    04.05.2020 08:45:00
    Работает отлично!!! Огромное спасибо
     
     
     
    Jotne
    Guest
    #4
    0
    04.05.2020 08:53:00
    Нашел эту тему: http://forum.mikrotik.com/t/i-did-it-script-to-compute-unix-time/68576/1 Если я смогу изменить скрипт, чтобы он принимал ввод, попытаюсь сделать скрипт, который будет конвертировать поле времени в эпохальное время. Тогда должно быть легко вычислить, старше ли 7 дней.
     
     
     
    shafiqrahman
    Guest
    #5
    0
    16.01.2022 20:03:00
    Как мне указать срок действия в списке адресов?
     
     
     
    MLR
    Guest
    #6
    0
    17.10.2023 07:21:00
    Есть ли кто-нибудь, кто может написать этот скрипт? Мне также нужен подобный скрипт, который бы удалял адреса из списка старше 60 дней. Я не могу использовать настройки таймаута динамического IP из-за сбоев в электроснабжении.
     
     
     
    MLR
    Guest
    #7
    0
    29.10.2023 17:17:00
    Удалить значения адресов, которые были созданы ровно 30 дней назад. :global datetime2epoch do={:local dtime [:tostr $1] /system clock :local cyear [get date] ; :if ($cyear ~ "....-..-..") do={:set cyear [:pick $cyear 0 4]} else={:set cyear [:pick $cyear 7 11]} :if (([:len $dtime] = 10) or ([:len $dtime] = 11)) do={:set dtime "$dtime 00:00:00"} :if ([:len $dtime] = 15) do={:set dtime "$[:pick $dtime 0 6]/$cyear $[:pick $dtime 7 15]"} :if ([:len $dtime] = 14) do={:set dtime "$cyear-$[:pick $dtime 0 5] $[:pick $dtime 6 14]"} :if ([:len $dtime] = 8) do={:set dtime "$[get date] $dtime"} :if ([:tostr $1] = "") do={:set dtime ("$[get date] $[get time]")} :local vdate [:pick $dtime 0 [:find $dtime " " -1]] :local vtime [:pick $dtime ([:find $dtime " " -1] + 1) [:len $dtime]] :local vgmt [get gmt-offset]; :if ($vgmt > 0x7FFFFFFF) do={:set vgmt ($vgmt - 0x100000000)} :if ($vgmt < 0) do={:set vgmt ($vgmt * -1)} :local arrm [:toarray "0,0,31,59,90,120,151,181,212,243,273,304,334"] :local vdoff [:toarray "0,4,5,7,8,10"] :local MM [:pick $vdate ($vdoff->2) ($vdoff->3)] :local M [:tonum $MM] :if ($vdate ~ ".../../....") do={ :set vdoff [:toarray "7,11,1,3,4,6"] :set M ([:find "xxanebarprayunulugepctovecANEBARPRAYUNULUGEPCTOVEC" [:pick $vdate ($vdoff->2) ($vdoff->3)] -1] / 2) :if ($M>12) do={:set M ($M - 12)} } :local yyyy [:pick $vdate ($vdoff->0) ($vdoff->1)] ; :if ((($yyyy - 1968) % 4) = 0) do={:set ($arrm->1) -1; :set ($arrm->2) 30} :local totd ((($yyyy - 1970) * 365) + (($yyyy - 1968) / 4) + ($arrm->$M) + ([:pick $vdate ($vdoff->4) ($vdoff->5)] - 1)) :return (((((($totd * 24) + [:pick $vtime 0 2]) * 60) + [:pick $vtime 3 5]) * 60) + [:pick $vtime 6 8] - $vgmt) }

         :local currDate [/system clock get date] :log info $currDate :local currDateSeconds [$datetime2epoch $currDate] :local aDayinSeconds "2592000" #измените это значение, чтобы получить количество дней (в одной сутках = 86400 x количество дней), в данном случае 259200 = 30 дней :local DSR :set DSR ([:tonum $currDateSeconds]-[:tonum $aDayinSeconds])

    #########################################################################xxxxxxxxxxxxxxxxxxxxxxxxxxx

    :global unixtodatetime do={ :local ux [:tonum $1] :local Fzerofill do={:return [:pick (100 + $1) 1 3]} :local prMntDays [:toarray "0,0,31,59,90,120,151,181,212,243,273,304,334"] :local vgmt [:tonum [/system clock get gmt-offset]]; :if ($vgmt > 0x7FFFFFFF) do={:set vgmt ($vgmt - 0x100000000)} :if ($vgmt < 0) do={:set vgmt ($vgmt * -1)} :local tzepoch ($ux + $vgmt) :if ($tzepoch < 0) do={:set tzepoch 0} ; # отрицательный unixepoch не поддерживается :local yearStart (1970 + ($tzepoch / 31536000)) :local tmpbissex (($yearStart - 1968) / 4) ; :if ((($yearStart - 1968) % 4) = 0) do={:set ($prMntDays->1) -1 ; :set ($prMntDays->2) 30} :local tmpsec ($tzepoch % 31536000) :local tmpdays (($tmpsec / 86400) - $tmpbissex) :if (($tmpsec < (86400 * $tmpbissex)) and ((($yearStart - 1968) % 4) = 0)) do={ :set tmpbissex ($tmpbissex - 1) ; :set ($prMntDays->1) 0 ; :set ($prMntDays->2) 31 ; :set tmpdays ($tmpdays + 1) } :if ($tmpsec < (86400 * $tmpbissex)) do={:set yearStart ($yearStart - 1) ; :set tmpdays ($tmpdays + 365)} :local mnthStart 12 ; :while (($prMntDays->$mnthStart) > $tmpdays) do={:set mnthStart ($mnthStart - 1)} :local dayStart [$Fzerofill (($tmpdays + 1) - ($prMntDays->$mnthStart))] :local timeStart (00:00:00 + [:totime ($tmpsec % 86400)]) :return "$yearStart/$[$Fzerofill $mnthStart]/$[$Fzerofill $dayStart] $timeStart" }

    :local DATE [$unixtodatetime $DSR]

    :local YYYY [:pick $DATE 0 4] :local mm [:pick $DATE 5 7] :local DD [:pick $DATE 8 10] :local LASTDAY "$YYYY-$mm-$DD"

    :log info $LASTDAY

    { :foreach i in=[/ip firewall address-list find where creation-time~"$LASTDAY" && list~"mylist"] do={ :local address [/ip firewall address-list get $i address] :log info "Удаление $address из mylist" /ip firewall address-list remove $i } }
     
     
     
    rextended
    Guest
    #8
    0
    30.10.2023 08:26:00
    RouterOS 7.10.+ использует дату в формате ISO, поэтому что-то вроде “ /ip firewall address-list remove [find where (creation-time< $daysago and list= $theList )] ” работает без использования циклов и быстрее. Просто посчитай $daysago как 30 дней меньше, чем “сегодня”, если у RouterOS есть такие функции… $daysago = [:todate [:toepoch [([:timestamp] - 2592000)]] ] ] или лучше… $daysago = ([:now] - 30d) Но, поскольку я, вероятно, написал больше скриптовых функций, чем “программисты” RouterOS… http://forum.mikrotik.com/t/convert-uptime-to-date-and-time/157724/37 :global timetoseconds do={ :local inTime $1 :local wPos   [:find $inTime “w” -1] :local dPos [:find $inTime “d” -1] :local itLen [:find $inTime “.” -1] ; :if ([:typeof $itLen] = “nil”) do={:set itLen [:len $inTime]} :local itSec [:pick $inTime ($itLen - 2) $itLen] :local itMin [:pick $inTime ($itLen - 5) ($itLen - 3)] :local itHou [:pick $inTime ($itLen - 8) ($itLen - 6)] :local itDay 0 :local itWee 0 :if (([:typeof $wPos] = “nil”) and ([:typeof $dPos] = “num”)) do={:set itDay [:pick $inTime 0 $dPos] } :if (([:typeof $wPos] = “num”) and ([:typeof $dPos] = “num”)) do={:set itDay [:pick $inTime ($wPos + 1) $dPos] } :if ([:typeof $wPos] = “num”) do={:set itWee [:pick $inTime 0 $wPos] } :local totitSec ($itSec + (60 * $itMin) + (3600 * $itHou) + (86400 * $itDay) + (604800 * $itWee)) :return $totitSec } :global unixtodatetime do={ :local ux [:tonum $1] :local Fzerofill do={:return [:pick (100 + $1) 1 3]} :local prMntDays [:toarray “0,0,31,59,90,120,151,181,212,243,273,304,334”] :local vgmt [:tonum [/system clock get gmt-offset]]; :if ($vgmt > 0x7FFFFFFF) do={:set vgmt ($vgmt - 0x100000000)} :if ($vgmt < 0) do={:set vgmt ($vgmt * -1)} :local tzepoch ($ux + $vgmt) :if ($tzepoch < 0) do={:set tzepoch 0} ; # неподдерживаемый отрицательный unix epoch :local yearStart (1970 + ($tzepoch / 31536000)) :local tmpbissex (($yearStart - 1968) / 4) ; :if ((($yearStart - 1968) % 4) = 0) do={:set ($prMntDays->1) -1 ; :set ($prMntDays->2) 30} :local tmpsec ($tzepoch % 31536000) :local tmpdays (($tmpsec / 86400) - $tmpbissex) :if (($tmpsec < (86400 * $tmpbissex)) and ((($yearStart - 1968) % 4) = 0)) do={ :set tmpbissex ($tmpbissex - 1) ; :set ($prMntDays->1) 0 ; :set ($prMntDays->2) 31 ; :set tmpdays ($tmpdays + 1) } :if ($tmpsec < (86400 * $tmpbissex)) do={:set yearStart ($yearStart - 1) ; :set tmpdays ($tmpdays + 365)} :local mnthStart 12 ; :while (($prMntDays->$mnthStart) > $tmpdays) do={:set mnthStart ($mnthStart - 1)} :local dayStart [$Fzerofill (($tmpdays + 1) - ($prMntDays->$mnthStart))] :local timeStart (00:00:00 + [:totime ($tmpsec % 86400)]) :return “$yearStart/$[$Fzerofill $mnthStart]/$[$Fzerofill $dayStart] $timeStart” } { :local theList “bannedList” :local hmanyds 30 :local daysago [$unixtodatetime [$timetoseconds ([:timestamp] - ($hmanyds * 86400))]] /ip firewall address-list remove [find where (creation-time<$daysago and list=$theList)] }
     
     
     
    MLR
    Guest
    #9
    0
    16.03.2024 01:10:00
    Я протестировал это, и по какой-то причине это удаляет весь список, а не только записи старше 30 дней. К сожалению.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры