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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Благодарил (а): 51 раз
Поблагодарили: 86 раз
Контактная информация:

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

Сообщение 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:
Что за модуль "Пингонлайн"?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Сб июл 27, 2019 9:34 pm

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:
Спасибо нам ПОМОЖЕТ..!
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение 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"? я надеюсь если увижу код то, может сам догадаюсь как "прикрутить" порт?
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Вт окт 15, 2019 10:01 pm

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));
}
За это сообщение автора xor поблагодарил:
Yashalta (Ср окт 16, 2019 3:01 pm)
Рейтинг: 1.16%
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

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

Сообщение Lerych » Пн окт 28, 2019 10:46 pm

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
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пн окт 28, 2019 11:47 pm

tarasfrompir писал(а):
Вт июл 23, 2019 10:26 pm
SmoKE_xDDD писал(а):
Вт июл 23, 2019 10:07 pm
Не будет. 3 секунды примерно выполняется.
вообще то есть где то в связи с устройствами проблеммы...кмк... :oops: :oops: :oops:
поправили
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Вт окт 29, 2019 6:51 pm

Logrus писал(а):
Пн окт 28, 2019 11:47 pm
tarasfrompir писал(а):
Вт июл 23, 2019 10:26 pm
SmoKE_xDDD писал(а):
Вт июл 23, 2019 10:07 pm
Не будет. 3 секунды примерно выполняется.
вообще то есть где то в связи с устройствами проблеммы...кмк... :oops: :oops: :oops:
поправили
Такой старый вопрос - пришлось перечитывать ... :oops:
Так а что было то ?
Спасибо нам ПОМОЖЕТ..!
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Вт окт 29, 2019 9:12 pm

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" в городе.
За это сообщение автора Yashalta поблагодарил:
Lerych (Вт окт 29, 2019 11:16 pm)
Рейтинг: 1.16%
Ответить