Здравствуйте уважаемые знатоки, прошу вашей помощи в написании скрипта.
Задача: При подключении пользователя к OVPN, исходя из имени клиента, отправить пакет WakeOnLan на сопоставленный mac-адрес.
Как я себе это представляю: в PPP профиле OVPN разместить скрипт в секции "On Up"
В чем проблема: не могу понять как присвоить переменную из вывода команды: ppp active print "ИМЯ клиента"
Скрипт поиска имени клиента VPN
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.
1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.
1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Из принта ничего не присвоите. Из get или из find берите. Там главное дать чёткие признаки. Вот пример из рабочей машинки. Но это если один такой туннель
Если много, надо найти уникальный признак для каждого, который будет определять однозначный поиск.
Код: Выделить всё
:put [ppp active get [/ppp active find service=sstp] name]
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 5
- Зарегистрирован: 13 сен 2017, 11:38
ver. 6.43.12
решил так:
только приходится для каждого имени писать, хорошо бы все циклом устроить...
решил так:
Код: Выделить всё
:local OPVNNameClient [/ppp active get [find name="ТоЧтоИщу"] name]; :if ($OPVNNameClient = "ТомуЧтоНужно") do {/system script run "ИмяСкриптаWOLдляКлиента"};
Последний раз редактировалось Luser 03 июл 2019, 19:32, всего редактировалось 1 раз.
-
- Сообщения: 5
- Зарегистрирован: 13 сен 2017, 11:38
исполнение вашего кода завершается ошибкой: invalid internal item number
-
- Сообщения: 1197
- Зарегистрирован: 29 сен 2011, 09:16
Если пользователей не много, то для каждого можно забиндить интерфейс и в профиле указать уникальный профайл (предварительно создать), в котором уже указать то что вы хотите делать при поднятии интерфейса, т.е. тупо строчку с готовой командой на посыл WOL пакета.Luser писал(а): ↑03 июл 2019, 10:13 Здравствуйте уважаемые знатоки, прошу вашей помощи в написании скрипта.
Задача: При подключении пользователя к OVPN, исходя из имени клиента, отправить пакет WakeOnLan на сопоставленный mac-адрес.
Как я себе это представляю: в PPP профиле OVPN разместить скрипт в секции "On Up"
В чем проблема: не могу понять как присвоить переменную из вывода команды: ppp active print "ИМЯ клиента"
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Блин, ну естественно. Я же сказал, что это просто пример из рабочей машинки. Я посмотрел имя, использовав в качестве признака в поиске имя сервиса. При другом признаке, например адресе клиента, будет работать поиск нормально.
И что вы там на жалобу жмёте? Вам нужно потревожить модератора? Так вот он я. Не трогайте эту кнопку по пустякам.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 5
- Зарегистрирован: 13 сен 2017, 11:38
Спасибо всем за помощь. Жалобу видимо случайно нажал (трудности перевода), прошу извинить. А насчет команды с "рабочей машинки" я указал service=pptp, он был поднят. Я никогда не использовал скрипты в mikrotik, поэтому и обратился сюда на форум.
invalid internal item number: Разобрался...ошибка возникла т.к. было 2 активных pptp соединения...
Код: Выделить всё
:put [ppp active get [/ppp active find service=pptp] name]
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
Да, да, именно так. Если под заданные параметры подойдут более одного результата, то выйдет ошибка с требование указать номер нужного результата. Именно поэтому нужно стараться задать параметры поиска так, чтобы подобной ошибки не было.
Вообще же, вариант с уникальными профилями под каждого юзера будет буквально идеальным. В профиле в последней вкладке пишите
и как бы всё. Или там для каждого профиля разный интерфейс будет? Не соображу сейчас. Пробуйте, если что, смоделируем ситуацию и изменим скрипт.
Вообще же, вариант с уникальными профилями под каждого юзера будет буквально идеальным. В профиле в последней вкладке пишите
Код: Выделить всё
tool wol mac=XX:XX:XX:XX:XX:XX interface=pptp
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 5
- Зарегистрирован: 13 сен 2017, 11:38
Помогите разобраться почему не работает код и не определяет переменную.
Есть активный пользователь в PPP, отображаю в терминале:
Пытаюсь написать скрипт проверки всех по имени:
/system script run "MyScript"
с таким содержимым:
На что получаю: no such item
В другом варианте:
/system script run "MyScript1"
ИСПРАВИЛ:
Есть активный пользователь в PPP, отображаю в терминале:
Код: Выделить всё
:put [/ppp active get [find name="Client1"] name];
Client1
/system script run "MyScript"
с таким содержимым:
Код: Выделить всё
{
{
:local NameClientOVPN [/ppp active get [find name="Client1"] name];
:if ($NameClientOVPN = "Client1") do {/system script run "WOL PC1"};
}
{
:local NameClientOVPN [/ppp active get [find name="Client2"] name];
:if ($NameClientOVPN = "Client2") do {/system script run "WOL PC2"};
}
}
В другом варианте:
/system script run "MyScript1"
Код: Выделить всё
:local NameClientOVPN [/ppp active get [find name="Client1"] name]; :if ($NameClientOVPN = "Client1") do {/system script run "WOL PC1"};
:local NameClientOVPN [/ppp active get [find name="Client2"] name]; :if ($NameClientOVPN = "Client2") do {/system script run "WOL PC2"};
no such item
Код: Выделить всё
foreach A in=[/ppp active get [/ppp active find service=ovpn] name] do={
if ($A="Client1") do={
/system script run "WOL PC1"
}
if ($A="Client2") do={
/system script run "WOL PC2"
}
}
-
- Сообщения: 2
- Зарегистрирован: 23 май 2022, 13:40
Хорошее решение, но так не работает!Luser писал(а): ↑08 июл 2019, 23:40 Помогите разобраться почему не работает код и не определяет переменную.
Есть активный пользователь в PPP, отображаю в терминале:Пытаюсь написать скрипт проверки всех по имени:Код: Выделить всё
:put [/ppp active get [find name="Client1"] name]; Client1
/system script run "MyScript"
с таким содержимым:На что получаю: no such itemКод: Выделить всё
{ { :local NameClientOVPN [/ppp active get [find name="Client1"] name]; :if ($NameClientOVPN = "Client1") do {/system script run "WOL PC1"}; } { :local NameClientOVPN [/ppp active get [find name="Client2"] name]; :if ($NameClientOVPN = "Client2") do {/system script run "WOL PC2"}; } }
В другом варианте:
/system script run "MyScript1"ИСПРАВИЛ:Код: Выделить всё
:local NameClientOVPN [/ppp active get [find name="Client1"] name]; :if ($NameClientOVPN = "Client1") do {/system script run "WOL PC1"}; :local NameClientOVPN [/ppp active get [find name="Client2"] name]; :if ($NameClientOVPN = "Client2") do {/system script run "WOL PC2"}; no such item
Код: Выделить всё
foreach A in=[/ppp active get [/ppp active find service=ovpn] name] do={ if ($A="Client1") do={ /system script run "WOL PC1" } if ($A="Client2") do={ /system script run "WOL PC2" } }
версия OS:6.48
А хотелось бы)
Работает вот так:
foreach A in=[/ppp active get [find name=Client1] name] do={
if ($A="Client1") do={
/system script run "Client1"
}
if ($A="Client2") do={
/system script run "WOL PC2"
}
}