Привет! Я ищу способ запустить скрипт, когда кто-то подключается к сети (возможно, определить это по DHCP-запросу от конкретных MAC-адресов?). Конкретно хотелось бы вызвать URL (REST API), чтобы включить свет (Philips Hue) в момент успешного подключения его/её устройства к сети. Я искал примеры, но не нашёл ничего подходящего — возможно, искал неправильно. Может, кто-нибудь подскажет пример или даст ссылку с похожим решением? Спасибо, Мартин.
Запуск скрипта при регистрации клиента в сети
Запуск скрипта при регистрации клиента в сети, RouterOS
29.07.2014 18:09:00
|
|
|
|
23.09.2014 14:44:00
Shoe, у тебя получилось это запустить?
|
|
|
|
25.09.2014 07:05:00
Прочитайте о ‘lease-script’ здесь
|
|
|
|
15.10.2014 06:37:00
Я работаю над чем-то похожим, в основном чтобы получать уведомления, когда определённый хост подключается. Скрипт «lease script», который запускается при выдаче аренды DHCP-сервером, кажется подходящим вариантом. Хотя в RouterOS 5.x нет функции «lease script», в версии 6.x она есть. Так что если хочется сделать это на 5.x, можно использовать запланированный скрипт, который запускается каждые 10 секунд, но это не очень эффективно и, скорее всего, вызовет проблемы с производительностью. Другой способ запустить скрипт при подключении хоста к сети — использовать hotspot. Можно запускать скрипт при входе пользователя, что может происходить автоматически, если разрешить вход по MAC-адресу. Это значит, что пользователь или устройство должны хотя бы один раз войти с именем пользователя и паролем, чтобы их MAC-адрес сохранился и запомнился при следующем входе. Я в этом новичок, так что исправьте, если что не так.
ИЗМЕНЕНИЕ: Ниже пример проверенного и работающего DHCP lease-скрипта: он сверяет IP-привязки hotspot с соответствующим MAC-адресом, меняйте URL сервера и отключайте строки с логированием, которые не нужны. Пока не уверен, когда именно и как скрипт вызывается — разбираюсь дальше, может кто-то поможет? Он работает на RouterOS 6.x(?), который поддерживает запуск скрипта при выдаче аренды DHCP (в 5.x этого нет). Встроенные "глобальные" переменные, доступные в скрипте: leaseBound — равно «1», если аренда выдана, иначе «0» leaseServerName — имя DHCP-сервера leaseActMAC — активный MAC-адрес leaseActIP — активный IP-адрес Скрипт запускается дважды: при первом запуске leaseBound=0, при втором — 1. Скрипт КОНЧАЕТСЯ здесь, если leaseBound = 0: if ([:tonum $leaseBound] < 1) do={ :log info “lease mac: $leaseActMAC не выдан, скрипт завершает работу”; return } Ваш URL здесь, GET-переменные добавятся позже: local serverUrl “ Для отладки, чтобы проверить свой MAC, поместите скрипт в репозиторий и запустите вручную: раскомментируйте две строки ниже и закомментируйте строку #26 #:local ourMAC “CC:FA:00:B4:1D:8B”; #:local ipBindingID [/ip hotspot ip-binding find mac-address=$ourMAC]; Сначала проверяем, есть ли MAC в привязках hotspot, получаем ID (NULL, если нет): local ipBindingID [/ip hotspot ip-binding find mac-address=$leaseActMAC]; Для отладки закомментируйте ниже строчки: log info “ip binding id: $ipBindingID”; log info “новая аренда: MAC: $leaseActMAC”; log info “Имя сервера: $leaseServerName”; log info “Lease Bound: $leaseBound”; log info “IP аренды: $leaseActIP”; Если ([:len $ipBindingID] > 0) делаем: # запись существует, комментарием в ip-binding может быть имя пользователя local macComment [/ip hotspot ip-binding get $ipBindingID comment]; # логируем совпадение log info "аренда есть в ip-bindings с комментарием: $macComment"; # GET-переменные, которые добавятся к URL local getVars "?lease_act_mac=$leaseActMAC"; set getVars ($getVars."&lease_server_name=$leaseServerName"); set getVars ($getVars."&lease_bound=$leaseBound"); set getVars ($getVars."&lease_act_ip=$leaseActIP"); set getVars ($getVars."&mac_comment=$macComment"); # делаем запрос на веб-сервер # и сохраняем ответ сервера в файл для справки /tool fetch mode=http url=($serverUrl.$getVars) dst-path=http_response.txt; # показываем содержимое файла с ответом сервера local httpResponse [/file get http_response.txt contents]; log info "Ответ HTTP-сервера: $httpResponse"; } else={ log info "MAC не найден в ip-bindings"; } |
|
|
|
17.10.2014 07:07:00
Есть похожая идея с другой функциональностью в другой теме:
|
|
|
|
18.10.2014 07:18:00
Пожалуйста. Перечитывая твоё сообщение, понимаю, что это может быть не совсем то, что ты хотел, но это легко можно изменить.
|
|
|
|
27.10.2014 08:07:00
Отлично, тогда супер! Просто небольшое замечание: если проверки не нужны, достаточно одной строки, как предлагает boen_robot в
/tool fetch url=("http://youserver.com/api\?mac=" . $leaseActMAC) |
||||
|
|
|||
Читают тему