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

Обсуждение ПО и его настройки
Safgan
Сообщения: 34
Зарегистрирован: 31 мар 2017, 15:46

podarok66 писал(а): 28 сен 2021, 13:11 Что будет, если половина устройств уже в адрес-листе, а половина ещё не добавлена? Надо смотреть, я именно на этот момент обращал внимание. Скрипт может завершаться ошибкой. Именно это описано по ссылке.
Спасибо за совет, буду смотреть как сделать проверку по ip в адрес листе.


Safgan
Сообщения: 34
Зарегистрирован: 31 мар 2017, 15:46

Переделал скрипт, основу взял из другого скрипта ( отлавливает днс и помещает Ip адрес лист) помогите найти проблему из-за чего скрипт не работает.

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

:local DNSList [/ip firewall address-list]
:local ListName "vpn_clients"
#:local DNSServers ( [ip dns get dynamic-servers], [ip dns get servers ], 8.8.8.8 )
#:foreach addr in $DNSList do={
#     :foreach DNSServer in $DNSServers do={
#          :do {:resolve server=$DNSServer $addr} on-error={:log debug ("failed to resolve $addr on $DNSServer")}
#     }
#}
#/ip firewall address-list remove [find where list~$ListName]
:foreach i in=[/ip dhcp-server lease find host-name~"WP"] do={
    :local bNew true
    :local match false
	
    :foreach i in=$DNSList do={
       :if (:typeof [:find $i] >= 0) do={
           :set $match true
       }
    }
    :if ( $match ) do={
        :local tmpAddress [/ip dhcp-server lease get $i address]
        :if ( [/ip firewall address-list find ] = "") do={
            :log debug ("added entry: $[/ip dhcp-server lease get $i address] IP $tmpAddress")
            /ip firewall address-list add address=$tmpAddress list=$ListName 
        } else={
            :foreach i in=[/ip firewall address-list find ] do={
                :if ( [/ip firewall address-list get $i address] = $tmpAddress ) do={
                    :set bNew false
                }
            }
            :if ( $bNew ) do={
                :log debug ("added entry: $[/ip dhcp-server lease get $i address] IP $tmpAddress")
                /ip firewall address-list add address=$tmpAddress list=$ListName
            }
        }
    }
}


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Хуже нет, чем переделывать чужой код. Каждый имеет свои любимые приёмы, которые использует при написании. И логика будет у каждого немного разная. Если вы берёте чей-то скрипт, ну так и спрашивайте у автора. Он хотя бы понимает, зачем использовал именно такие приёмы.
Я и свой-то старый код когда вижу, не могу вспомнить, что откуда. Старый стал, память совсем дырявая.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Safgan
Сообщения: 34
Зарегистрирован: 31 мар 2017, 15:46

Вот полностью рабочий скрипт, по добавлению ip адреса в address list , с проверкой на имеющийся ip в листе..

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

:local mydrop false;
:local myadd true;
:foreach i in=[/ip dhcp-server lease find host-name~"WP"] do={:set $ipaddr [/ip dhcp-server lease get $i address]; $ipaddr; :if ([/ip firewall address-list print value-list count-only where list=vpn_clients and address=$ipaddr]>0) do={$mydrop false} else={:put [/ip dhcp-server lease get $i address]};
:if ( [/ip firewall address-list find ] = "")  do={ $myadd true} else={:do {/ip firewall address-list add list=vpn_clients address=[/ip dhcp-server lease get $i address]}}}; 

Спасибо за помощь и наставление :dan_ser: .


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Поздравляю...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить