Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсак.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
592.9 Кб
Скачать
    1. Модуль управління процесами на віддаленій еом

Сторона клієнта (менеджера)

За допомогою цього модуля можна керувати процесами на віддаленій машині, а саме він дозволяє вибрати необхідний процес для запуску, отримати результат роботи та завершити запущений процес.

Рис.1. Вигляд вікна вибору та запуску процесів

HTML:

<select id="process">

<OPTION>Calc.exe</OPTION>

***

<OPTION>MsPaint.exe</OPTION>

</select>

<input onclick="snmp_set_run_process()" type="submit" value="Запустити процес" />

JS:

function snmp_set_run_process() {

setInterval(function(){

get_process();

}, 10000); {

$.ajax({

type: 'POST',

url: 'http://127.0.0.1:81/kursak_client/snmpset.php',

data: 'process=' + $('#process').val(),

success: function(data){ alert(data); }});}

При натисканні на кнопку “Запустити процес” ми запускаємо функцію get_proccess() з інтервалом в 10 секунд. Далі ми відправляємо асинхронний запит методом POST на сторінку з адресою http://127.0.0.1:81/kursak_client/snmpset.php . В запиті POST ми передаємо вміст тега process.

snmpset.php

<?

session_start();

$n_process;

switch($_POST['process']) {

case 'Calc.exe':$n_process = '1'; $_SESSION['process'] = 'Calc.exe';break;

case 'MsPaint.exe':$n_process = '4'; $_SESSION['process'] = 'MsPaint.exe';break;

default:

echo 'Error'; };

snmp_set_quick_print(1);

$c = snmpset("192.168.1.4", "pub1", ".1.3.6.1.4.1.2021.14.1.1.2.0", "s", $n_process);

?>

Snmpset.php служить для відправки певних даних в SNMP змінну ucdDemoPublicString, її цифровий запис ".1.3.6.1.4.1.2021.14.1.1.2.0”.

Спочатку ми створюємо сесію, перевіряємо номер процесу, записуємо его в сесію і відправляємо даний номер на іншу машину з IP 192.168.1.4, з community pub1. Тип даних, який ми записуємо – String, про що свідчить символ “s” у функції snmpset(). Після цього сторінка Snmpset.php віддає відповідь про помилку (якщо вона була) на сторінку index.php

Функція get_process(), яку ми запускаємо з інтервалом в 10 секунд після запуску snmp_set_run_process().

function get_process() { $.ajax({

type: 'GET',

url: 'http://127.0.0.1:81/kursak_client/get_process.php',

data: '',

success: function(data){

$('#process_now').html(data);

$('#kill').html('<input id="knopka" onclick="snmp_set_kill_process()" type="submit" value="Вбити процес" />'); } }); }

Під час виконання цієї функції ми звертаємося через асинхронний запит методом GET на сторінку: …kursak_client/get_process.php, яка містить наступний код, який виводить процес з сесії (процес був записаний на сторінці snmpset.php).

get_process.php

<? session_start();

echo $_SESSION['process']; ?>

В результаті успішного виконання Ajax запиту функція js get_process()

виводить запущений процес і дозволяє його завершити.

Рис.2. Вигляд вікна запущених процесів.

HTML:

<input id="knopka" onclick="snmp_set_kill_process()" type="submit" value="Вбити процес" />

Функція js snmp_set_kill_process() створена для того, щоб завершувати необхідні процеси та виводити результат роботи.

function snmp_set_kill_process(){{

$.ajax({

type: 'POST',

url: 'http://127.0.0.1:81/kursak_client/snmpset_kill.php',

data: 'process_now=' + $('#process_now').text(),

success: function(data){

alert(data); }});}}

Snmp_set_kill_process() відправляє асинхронний запит методом POST на сторінку h://127.0.0.1:81/kursak_client/snmpset_kill.php і передає вміст тега

<p id="process_now"> </p>. Таким чином реалізований механізм завершення процесів, які були запущені через менеджер на віддаленій машині.

У результаті успішного запиту на сторінку snmpset_kill.php JS виводить інформацію про помилку чи про успішний запит.

Процеси запускає і завершує сервер Apache, який встановлено на віддаленій машині. Він виконує роль snmptrapd, який в певний інтервал часу перевіряє змінні MIB, та запускає чи завершує процеси.

Використання серверу Apache дозволяє запускати дану утиліти на будь-якій платформі (ОС), яка підтримує Apache, таким чином підтримується кроссплатформенність.

Snmpset_kill.php

<?

session_start();

$n_process;

switch($_POST['process_now']) {

case 'Calc.exe':$n_process = '1'; $_SESSION['process'] = 'Calc.exe';break;

case 'MsPaint.exe':$n_process = '4'; $_SESSION['process'] = 'MsPaint.exe';break;

default:

echo 'Error';

};

snmp_set_quick_print(1);

$c = snmpset("192.168.1.4", "pub1", ".1.3.6.1.4.1.2021.14.1.1.2.0", "s", '0' . $n_process);

sleep(15);

$c = snmpset("192.168.1.4", "pub1", ".1.3.6.1.4.1.2021.14.1.1.2.0", "s", '00');

?>

snmp_set_quick_print(1); // дозволяє отримувати тільки значення змінної з MIB, але без його типу.

Після передачі методом POST змінної $_POST[‘process_now’], вона перевіряється і заноситься в змінну $n_process, після чого дані передаються функцією snmpset() і змінюється другий символ змінної ucdDemoPublicString на 0, що означає завершення процесу.

Також слідує функция sleep(15), яка призупиняє роботу скрипту і чекає 15 секунд, щоб виконати наступний запит snmpset(), при якому змінна ucdDemoPublicString отримує значення String ‘00’, щоб уникнути повторного запуску процесів на віддаленій машині. Перший символ в змінній відповідає за запуск процесу, а другий відповідає за його завершення.

Серверна сторона (агент)

С ервер або агент необхідно запустити на віддаленій машині, щоб агент міг відповідати на запити менеджера. Для цього потрібно запустити на віддаленій машині утиліту snmpd.exe від net-snmp. Тільки після цього ми можемо використовувати протокол snmp, подавати запит через консоль і отримувати відповідь.

Рис.3. Запуск служби snmpd

Для перевірки його роботи необхідно в консолі ввести команду

Snmpget –v2c –c pub1 192.168.1.4 .1.3.6.1.2.1.1.5.0

Д е v2c – версія протоколу, pub1 – community, 192.168.1.4 – ip адреса машини, на якій запущений агент snmpd.exe і директива MIB, яка містить в собі ім’я машини.

Рис.4. Запуск команди snmpget

Серверна сторона управління процесами (веб-інтерфейс)

Для того, щоб дати змогу запускати та завершати процеси на віддаленій машині, на ній потрібно запустити (крім агента snmpd) в браузері скрипт snmpd.php. Це необхідно для того, щоб Apache мав змогу запускати та завершати процеси, а також для візуального вигляду.

Рис.5. Запуск скрипту snmpd.php

HTML:

<input onclick="set_snmptrapd_on()" value="Запуск Snmptrapd" />

<input onclick="set_snmptrapd_off()" value="Зупинка Snmptrapd" />

JS:

function set_snmptrapd_on()

{

interval_snmptrapd = setInterval(function(){ set_snmptrapd_on1(); }, 15000); };

Функція set_snmptrapd_on() створює інтервал з назвою interval_snmptrapd, який буде запускати іншу функцію – set_snmptrapd_on1() кожних 15 секунд.

function set_snmptrapd_on1() {

clearInterval(interval_snmptrapd);

$.ajax({

type: 'GET',

url: 'http://127.0.0.1:81/kursak/snmptrapd_on.php',

data: '',

success: function(data){

//alert(data); }});}

Функція set_snmptrapd_on1() спочатку знищує інтервал з назвою interval_snmptrapd для того, щоб не навантажувати сервер та уникнути зайвих запитів. Далі йде асинхронний запит методом GET на сторінку:

'http://127.0.0.1:81/kursak/snmptrapd_on.php'

У разі успішного запиту браузер отримає статус завершення скрипту.

Snmptrapd_on.php

<?

snmp_set_quick_print(1);

$rez_snmpget = snmpget("192.168.1.4", "pub1", ".1.3.6.1.4.1.2021.14.1.1.2.0");

switch ($rez_snmpget[1]) {

case '1':exec('calc.exe');break;

case '4':exec('mspaint.exe');break;

default:

echo "Error run proccess";};

?>

Скрипт snmptrapd_on.php звертається до змінної ucdDemoPublicString через функцію snmpget і перевіряє другий символ (або перший символ, якщо не враховувати ‘ ‘, які записуються в змінну коли виконується команда snmpset.

Після перевірки скрипт запускає необхідний процес.

Інтервал для перевірки команди на завершення процесу:

setInterval(function() { set_snmptrapd_kill(); }, 10000);

Який запускає функцію set_snmptrapd_kill() з інтервалом в 10 секунд.

function set_snmptrapd_kill() {

interval_snmptrapd = setInterval(function() { set_snmptrapd_on1(); }, 15000);

$.ajax({

type: 'POST',

url: 'http://localhost/kursak/snmptrapd_kill.php',

data: 'n_kill=' + n_kill,

success: function(data){ }});}

Функція set_snmptrapd_kill() в першу чергу знову створює інтервал (який був знищений в попередній функції), щоб відновити роботу перевірки скрипту на запуск певного процесу.

Далі відбувається запит методом POST на сторінку snmptrapd_kill.php.

Snmptrapd_kill.php

<?

switch ($_POST['n_kill']) {

case '1':exec('taskkill /F /IM calc.exe');break;

case '4':exec('taskkill /F /IM mspaint.exe');break;

default:

echo "Error kill proccess";};

?>

Скрипт перевіряє змінну і виконує команду cmd taskkill з параметром /F, що означає примусове припинення роботи процесу, а також з параметром /IM – пошук процесу по імені.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]