Страница 7 из 7

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Пт июл 26, 2019 7:17 pm
workpage
tarasfrompir писал(а): Пт июл 26, 2019 7:14 pm
workpage писал(а): Пт июл 26, 2019 7:07 pm Вобщем написал такой вот сценарий. У каждого устройства, которое будем проверять, надо добавить 2 дополнительных свойства. Ping и ip. В ping скрипт будет вписывать 1 или 0 в случае изменения, в ip надо записать ip адрес. С свойству Ping привязывем новый метод и он уже делает оповещения.
Время выполнения данного сценария, если все устройства online - менее 10 секунд!!! (76 ip адресов)
Воткнул запуск сценария в OnNewMinite
runScript('Ping');
Ну вот, все испортил... :oops: :oops: :oops:
Во первых - зачем делать все тоже что делает модуль, пингонлайн...
во вторых зачем грузить систему дополнительными данными ? ну хз не знаю...
в третих молодец что сделал... :shock: :shock: :shock: :shock:
ну и вроде все мысли кончились :oops: :oops: :oops:
Что за модуль "Пингонлайн"?

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Сб июл 27, 2019 9:34 pm
tarasfrompir
workpage писал(а): Пт июл 26, 2019 7:17 pm
tarasfrompir писал(а): Пт июл 26, 2019 7:14 pm
workpage писал(а): Пт июл 26, 2019 7:07 pm Вобщем написал такой вот сценарий. У каждого устройства, которое будем проверять, надо добавить 2 дополнительных свойства. Ping и ip. В ping скрипт будет вписывать 1 или 0 в случае изменения, в ip надо записать ip адрес. С свойству Ping привязывем новый метод и он уже делает оповещения.
Время выполнения данного сценария, если все устройства online - менее 10 секунд!!! (76 ip адресов)
Воткнул запуск сценария в OnNewMinite
runScript('Ping');
Ну вот, все испортил... :oops: :oops: :oops:
Во первых - зачем делать все тоже что делает модуль, пингонлайн...
во вторых зачем грузить систему дополнительными данными ? ну хз не знаю...
в третих молодец что сделал... :shock: :shock: :shock: :shock:
ну и вроде все мысли кончились :oops: :oops: :oops:
Что за модуль "Пингонлайн"?
имелся ввиду модуль устройства онлайн... :oops: :oops: :oops:

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Вт окт 15, 2019 9:49 pm
Yashalta
Подскажите пожалуйста как пинговать "ip" + "port"? Мне это нужно, что бы пинговать vpn.
я тут экспериментировал с методом из этой ветки но, все печально!

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

$ipport = $this->getProperty('ip') . ':' . $this->getProperty('port') ;
$online = ping($ipport);
...
и так пробовал, тоже не работает.

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

$online = ping($this->getProperty('ip'),$this->getProperty('port'));
...
Или может кто "ткнет меня носом" в строенную функцию "ping"? я надеюсь если увижу код то, может сам догадаюсь как "прикрутить" порт?

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Вт окт 15, 2019 10:01 pm
xor
Yashalta писал(а): Вт окт 15, 2019 9:49 pm Подскажите пожалуйста как пинговать "ip" + "port"? Мне это нужно, что бы пинговать vpn.
я тут экспериментировал с методом из этой ветки но, все печально!

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

$ipport = $this->getProperty('ip') . ':' . $this->getProperty('port') ;
$online = ping($ipport);
...
и так пробовал, тоже не работает.

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

$online = ping($this->getProperty('ip'),$this->getProperty('port'));
...
Или может кто "ткнет меня носом" в строенную функцию "ping"? я надеюсь если увижу код то, может сам догадаюсь как "прикрутить" порт?

\htdocs\lib\general.class.php

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

/**
 * Ping host
 * @param mixed $host Host address
 * @return bool
 */
function ping($host)
{
   if (IsWindowsOS())
      exec(sprintf('ping -n 1 %s', escapeshellarg($host)), $res, $rval);
   elseif (substr(php_uname(), 0, 7) === "FreeBSD")
      exec(sprintf('ping -c 1 -t 5 %s', escapeshellarg($host)), $res, $rval);
   else
      exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);

   return $rval === 0 && preg_match('/ttl/is', join('', $res));
}

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Пн окт 28, 2019 10:46 pm
Lerych
Yashalta писал(а): Вт окт 15, 2019 9:49 pm Подскажите пожалуйста как пинговать "ip" + "port"? Мне это нужно, что бы пинговать vpn.
я тут экспериментировал с методом из этой ветки но, все печально!

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

$ipport = $this->getProperty('ip') . ':' . $this->getProperty('port') ;
$online = ping($ipport);
...
и так пробовал, тоже не работает.

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

$online = ping($this->getProperty('ip'),$this->getProperty('port'));
...
Или может кто "ткнет меня носом" в строенную функцию "ping"? я надеюсь если увижу код то, может сам догадаюсь как "прикрутить" порт?
Приветствую!
Получилось, что хотели? Если да, поделитесь опытом. Я в свою очередь решил пинг с портами через модуль TCP_socket.
viewtopic.php?f=4&t=2750&hilit=TCP_sock ... =30#p98629

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Пн окт 28, 2019 11:47 pm
Logrus
tarasfrompir писал(а): Вт июл 23, 2019 10:26 pm
SmoKE_xDDD писал(а): Вт июл 23, 2019 10:07 pm Не будет. 3 секунды примерно выполняется.
вообще то есть где то в связи с устройствами проблеммы...кмк... :oops: :oops: :oops:
поправили

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Вт окт 29, 2019 6:51 pm
tarasfrompir
Logrus писал(а): Пн окт 28, 2019 11:47 pm
tarasfrompir писал(а): Вт июл 23, 2019 10:26 pm
SmoKE_xDDD писал(а): Вт июл 23, 2019 10:07 pm Не будет. 3 секунды примерно выполняется.
вообще то есть где то в связи с устройствами проблеммы...кмк... :oops: :oops: :oops:
поправили
Такой старый вопрос - пришлось перечитывать ... :oops:
Так а что было то ?

Re: Пингуем устройства. Как быть? Устройства Online.

Добавлено: Вт окт 29, 2019 9:12 pm
Yashalta
Lerych писал(а): Пн окт 28, 2019 10:46 pm Приветствую!
Получилось, что хотели? Если да, поделитесь опытом. Я в свою очередь решил пинг с портами через модуль TCP_socket.
viewtopic.php?f=4&t=2750&hilit=TCP_sock ... =30#p98629
После 3-х месячного чтения и разбора примеров по этой книге https://www.programmer-books.com/wp-con ... rd-way.pdf
Я состряпал код на PHP, чему несказанно рад т.к. изучал Python! если кто "допилит" мое "творение" буду благодарен хотя, он и в таком виде у меня работает на 5-ку!
Мои требования к коду такие:
1. Клиент, он же "MD" на Rasspberry подключаться к "OpenVPN" если тот в сети! А так как "OpenVPN" у меня дома на Synology то, нужно пинговать как внешний "IP" Synology так и его "port"!
2. Если "OpenVPN" не в сети то, убиваем все возможно запущенные сервисы в названии которых есть "openvpn". Это нужно, что бы могли подключиться если "OpenVPN" появится в сети! Мы не подключимся если у нас будут висеть "мертвые" сервисы "openvpn".
3. Если "OpenVPN" в сети то, пингуем внутреннюю сеть OpenVPN т.к. возможно, что OpenVPN пингуется но, клиент не подключен!
4. Если пингуется "OpenVPN" и нет сети то, подключаемся!
5. Если пингуется "OpenVPN" и внутренняя сеть "OpenVPN" тоже пингуется то, ничего не делаем.
И так в бесконечном цикле. А бесконечный цикл у меня это "crone" на "MD" c такими параметрами */1 * * * * т.е. раз в минуту.
Код

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

$host = 'X.X.X.X'; // Впиши сюда свой белый "IP"
$port = XXXX;  // Впиши сюда номер порта
$waitTimeoutInSeconds = 1; 

function runVPN() {
    //echo 'Запускаю OpenVPN! '.date("H:i").'<br>';
    exec('/usr/bin/sudo /home/pi/.ovpn/symple_run_ovpn.sh');
}

function killVPN() {
    //echo 'Отключаю OpenVPN! '.date("H:i").'<br>';
    exec('/usr/bin/sudo /home/pi/scripts/stop_service_vpn.sh');
}

function ping_vpn() {

$waitTimeoutInSeconds = 1; 
$vpn_host = "X.X.X.X"; // Впиши сюда "IP" внутренней сети OpenVPN
$vpn_port = 22; // Впиши сюда номер порта

    if($fp = fsockopen($vpn_host,$vpn_port,$errCode,$errStr,$waitTimeoutInSeconds)){   
    //echo 'OpenVPN в сети! '.date("H:i").'<br>';
    } else {
    //echo 'OpenVPN НЕ в сети, перезапускаю openVPN! '.date("H:i").'<br>';
    killVPN();
    sleep(3);
    runVPN();
} 
fclose($fp);
}

// -----------------BODY OF CODE---------------------
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){   
    //echo 'Synology в сети, проверка связи с VPN! '.date("H:i").'<br>';
    ping_vpn();
} else {
    //echo 'Synology НЕ в сети: '.date("H:i").'<br>';
    killVPN();
} 
fclose($fp);
Код в 7-й строке ссылается на "Bash" скрипт "symple_run_ovpn.sh" который лежит у меня на "Rasspberry"
код "symple_run_ovpn.sh". Это просто команда для запуска клиента "openvpn" на linux.

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

#!/bin/bash
openvpn --config /home/pi/.ovpn/Raspberry.ovpn
А так же в 12-й строке тоже ссылка на "Bash" скрипт "stop_service_vpn.sh" который тоже лежит у меня на "Rasspberry"
код stop_service_vpn.sh Скрипт просто находит все запущенные сервисы которые имеют в названии "openvpn" и убивает их.

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

#!/bin/bash

PID=`ps -eaf | grep openvpn | grep -v grep | awk '{print $2}'`
if [[ "" !=  "$PID" ]]; then
  echo "killing $PID"
  kill -9 $PID
fi
Что мне не нравиться в этом коде:
a) Не нравиться то, что код написан на PHP а запускает "Bash" скрипты! Правильно было бы все написать на PHP но, я еще только учусь...
б) Переменные функции "ping_vpn" грамотнее было бы, перечислить непосредственно в названии функции в скобках а не так как это сделал я! Я конечно пробовал указать правильно но, то ли синтаксис нарушал то ли в не правильной последовательности писал, писало ошибку! Я и забил, нужно изучать PHP!

PS - Клиент "MD" в селе а cсервер "OpenVPN" в городе.