скрипт контроля работы pptp-сервера

Здесь выкладываем скрипты
Ответить
Sertik
Сообщения: 420
Зарегистрирован: 15 сен 2017, 09:03

13 янв 2019, 17:25

Сегодня наваял такой скриптик. В принципе он универсален - это скрипт таймера.
Может контролировать работу чего угодно в пяти состояниях: ожидание, включение, включение на заданное время с последующим выключением, выключение, выключение на заданное время с последующим включением.
Я его использую для контроля работы pptp-сервера, т.к. pptp не слишком защищенный VPN, логично чтобы он не всегда был открыт. А в принципе можно адаптировать для чего угодно.

В окружении переменных до запуска этого скрипта должны быть определены глобальные переменные pptpTime (время таймера) и pptpFlag (тип команды - on, off, ontime, offtime; для типов on/off pptpTime задавать не нужно, только определить)
Сам скрипт вызывать из планировщика 1 раз в минуту (интервал можно задать любой, подкорректировав текст присылаемых sms-сообщений и сообщений выдаваемых в лог)

Может кому пригодится.

 
# script_"pptp_Server Time control" (ptc) jan/13/2019 16:58:15

# by Serkov S.V. (SerTik)

# перед выполнением этого скрипта должны быть определены глобальные переменные pptpTime и pptpFlag
# в планировщик добавить запуск данного скрипта "ptc" с интервалом 1 мин (по умолчанию).

# скрипт контролирует время работы PPTP-сервера и всех его клиентов сразу
# (через включение/выключение pptp-сервера и pptp-secrets на всякий случай)
# позволяет разрешить постоянную работу или включать/выключать PPTP-server на заданное время
# pptpTime (время таймера) измеряется в единицах выполнения скрипта в планировщике
# то есть если например скрипт в Планировщике выполняется 1 раз в минуту то pptpTime измеряется в минутах
# если скрипт выполняется раз в час - то pptpTime измеряется в часах
# текст сообщений Администратору настроен по умолчанию на работу с минутами

# логика работы при срабатывании скрипта:
# pptpFlag="wait" - ничего не делаем, ожидание
# pptpFlag="on" - включаем, сообщаем админу по смс на номер в ADMINPHONE, переходим к ожиданию, устанавливая pptpFlag="wait"
# pptpFlag="off" - выключаем, сообщаем админу, переходим к ожиданию, устанавливая pptpFlag="wait"
# pptpFlag="ontime" - включаем, сообщаем, отнимаем таймер, следим за таймером
# pptpFlag="offtime" - выключаем, сообщаем, отнимаем таймер, следим за таймером

# при истечении времени таймера - для состояния pptpFlag="ontime" устанавливаем pptpFlag="off"
# при истечении времени таймера - для состояния pptpFlag="offtime" устанавливаем pptpFlag="on"
# на следующем проходе скрипта выполняется соответствующее действие (on/off)

# (перед этим проверяем допустимое установленное значение таймера >0) иначе выдаем ошибку и переходим к ожиданию "wait"

# скрипт также проверяет команду на допустимую из массива разрешенных имен команд arrayCommands


# define variables:

:local arrayCommands {"on"; "off"; "ontime"; "offtime"};
:local actRun 0
:global ADMINPHONE;
:global pptpServerStatus; # резерв
:global pptpTime;
:global pptpFlag;
:global pptpFcount;

:if ($pptpFlag!="wait") do={

:foreach cmd in=$arrayCommands do={ :if ($cmd=$pptpFlag) do={:set actRun 1}
}

:if ($actRun=1) do={

:if ($pptpFlag="on") do={
/interface pptp-server server set enabled=yes;
:foreach i in=[/ppp secret find] do={[/ppp secret set $i disabled=no];}
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: PPTP-server unlocked");
:log info ""; log warning "PPTP-server unblocked"; :log info "";
:set pptpFlag "wait"; :set pptpFcount 0}

:if ($pptpFlag="off") do={
/interface pptp-server server set enabled=no;
:foreach i in=[/ppp secret find] do={[/ppp secret set $i disabled=yes]}
:foreach i in=[/ppp active find] do={[/ppp active remove $i]}
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: PPTP-server all blocked");
:log info ""; :log error "PPTP-server all blocked"; log info "";
:set pptpFlag "wait"; :set pptpFcount 0}

:if ($pptpFlag!="wait") do={

:if ($pptpTime<=0) do={
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: pptpTimecontrol script: ERROR setting time variable value");
:log info ""; :log error "pptpTimecontrol script: ERROR setting time variable value in pptpFlag=ontime/offtime"; log info ""; :set pptpFlag "wait"; :set pptpFcount 0;} else={

:if ($pptpFlag="ontime") do={:if ($pptpFcount!=1) do={
/interface pptp-server server set enabled=yes;
:foreach i in=[/ppp secret find] do={[/ppp secret set $i disabled=no];}
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: PPTP-server enabled a "."$pptpTime"." min");
:log info ""; log warning ("PPTP-server enabled a "."$pptpTime"." min"); :log info ""; :set pptpFcount 1;}
}

:if ($pptpFlag="offtime") do={:if ($pptpFcount!=2) do={
/interface pptp-server server set enabled=no;
:foreach i in=[/ppp secret find] do={[/ppp secret set $i disabled=yes]}
:foreach i in=[/ppp active find] do={[/ppp active remove $i]}
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: PPTP-server disabled a "."$pptpTime"." min");
:log info ""; log warning ("PPTP-server disabled a "."$pptpTime"." min"); :log info ""; :set pptpFcount 2;}
}

:if ($pptpFcount!=0) do={:set pptpTime ($pptpTime - 1);}

:if (($pptpTime=0) and ($pptpFlag="ontime")) do={:set $pptpFlag "off"}
:if (($pptpTime=0) and ($pptpFlag="offtime")) do={:set $pptpFlag "on"}

}
}
} else={ /tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: pptpTimecontrol script: ERROR command name <$pptpFlag>");
:log info ""; :log error "pptpTimecontrol script: ERROR command name <$pptpFlag>"; log info ""; :set pptpFlag "wait"; :set pptpFcount 0;}
}
Последний раз редактировалось Sertik 14 янв 2019, 09:39, всего редактировалось 4 раза.


Чего не знаем то нагуглим
Sertik
Сообщения: 420
Зарегистрирован: 15 сен 2017, 09:03

13 янв 2019, 17:37

Чтобы из СМС можно было управлять работой pptp-сервера посредством вышевыложенного скрипта ptc пишем следующий микроскрипт ptcsms:

:global pptpTime $Time;
:global pptpFlag $cmd;

Тогда передать значения в переменные можно следующим SMS:

:cmd <Secret> script <Name> cmd=XX Time=NN;

* <Secret> - настроенный секрет для выполнения скриптов, присланных в sms (/tool sms)
<Name> - имя скрипта (в нашем случае ptcsms)
XX - команда (on, off, ontime, offtime)
NN - время таймера в минутах (для команд ontime и offtime)


Чего не знаем то нагуглим
Sertik
Сообщения: 420
Зарегистрирован: 15 сен 2017, 09:03

13 янв 2019, 18:54

Для универсальности адаптировал скрипт в следующий вид. Если вставить в закомментированные точки действия по включению, выключению, включению на время, выключению на время чего-либо - может управлять хоть космическим кораблем ...

 

# script_"exec_Time control" (etc) jan/13/2019 16:58:15

# by Serkov S.V. (SerTik)

# перед выполнением этого скрипта должны быть определены глобальные переменные exTime и exCmd
# в планировщик добавить запуск данного скрипта "etc" с интервалом 1 мин (по умолчанию).

# скрипт контролирует время работы чего угодно
# позволяет разрешить постоянную работу или включать/выключать "нечто" на заданное время
# exTime (время таймера) измеряется в единицах выполнения скрипта в планировщике
# то есть если например скрипт в Планировщике выполняется 1 раз в минуту то exTime измеряется в минутах
# если скрипт выполняется раз в час - то exTime измеряется в часах
# текст сообщений Администратору настроен по умолчанию на работу с минутами

# логика работы при срабатывании скрипта:
# exCmd="wait" - ничего не делаем, ожидание
# exCmd="on" - включаем, сообщаем админу по смс на номер в ADMINPHONE, переходим к ожиданию, устанавливая exCmd="wait"
# exCmd="off" - выключаем, сообщаем админу, переходим к ожиданию, устанавливая exCmd="wait"
# exCmd="ontime" - включаем, сообщаем, отнимаем таймер, следим за таймером
# exCmd="offtime" - выключаем, сообщаем, отнимаем таймер, следим за таймером

# при истечении времени таймера - для состояния exCmd="ontime" устанавливаем exCmd="off"
# при истечении времени таймера - для состояния exCmd="offtime" устанавливаем exCmd="on"
# на следующем проходе скрипта выполняется соответствующее действие (on/off)

# (перед этим проверяем допустимое установленное значение таймера >0) иначе выдаем ошибку и переходим к ожиданию (exCmd="wait")

# скрипт также проверяет команду exCmd на допустимую из массива разрешенных имен команд arrayCommands


# define variables:

:local arrayCommands {"on"; "off"; "ontime"; "offtime"};
:local actRun 0
:global ADMINPHONE;
:global exTime;
:global exCmd;
:global excount;

:if ($exCmd!="wait") do={

:foreach cmd in=$arrayCommands do={ :if ($cmd=$exCmd) do={:set actRun 1}
}

:if ($actRun=1) do={

:if ($exCmd="on") do={ # действия по "включению" чего либо
:set exCmd "wait"; :set excount 0}

:if ($exCmd="off") do={ # действия по выключению
:set exCmd "wait"; :set excount 0}

:if ($exCmd!="wait") do={

:if ($exTime<=0) do={
/tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: exTimecontrol script: ERROR setting time variable value");
:log info ""; :log error "exTimecontrol script: ERROR setting time variable value in exec command=ontime/offtime"; log info ""; :set exCmd "wait"; :set excount 0;} else={

:if ($exCmd="ontime") do={:if ($excount!=$exCmd) do={ # действия по "включению на время"
:set excount $exCmd;}
}

:if ($exCmd="offtime") do={:if ($excount!=$exCmd) do={ # действия по выключению на время
:set excount $exCmd;}
}

:set exTime ($exTime - 1);

:if (($exTime=0) and ($exCmd="ontime")) do={:set $exCmd "off"}
:if (($exTime=0) and ($exCmd="offtime")) do={:set $exCmd "on"}

}
}
} else={ /tool sms send usb2 channel=2 phone=$ADMINPHONE message=("Router $[/system identity get name]: exTimecontrol script: ERROR command name <$exCmd>");
:log info ""; :log error "exTimecontrol script: ERROR command name <$exCmd>"; log info ""; :set exCmd "wait"; :set excount 0;}
}


Чего не знаем то нагуглим
Ответить