Пингуем устройства. Как быть? Устройства Online.
Модератор: immortal
-
- Сообщения: 104
- Зарегистрирован: Вт май 12, 2015 9:59 pm
- Благодарил (а): 16 раз
- Поблагодарили: 13 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Люди добрые! Выручайте!
Переустановил ОСЬ на одном из компов. Ось мелкософтовская семерка. Так вот эта машина перестала пинговаться сервером с Алисой, хотя сканер сети с другого компа видит ее. Подскажите, что можно сделать?
Переустановил ОСЬ на одном из компов. Ось мелкософтовская семерка. Так вот эта машина перестала пинговаться сервером с Алисой, хотя сканер сети с другого компа видит ее. Подскажите, что можно сделать?
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
-
- Сообщения: 104
- Зарегистрирован: Вт май 12, 2015 9:59 pm
- Благодарил (а): 16 раз
- Поблагодарили: 13 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Полностью не могу его отключить. Есть еще соображения?
Отправлено с моего SM-T116 через Tapatalk
Отправлено с моего SM-T116 через Tapatalk
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Пингуем устройства. Как быть? Устройства Online.
У меня на Win 7 отключен ручками полностью. там 2 "крыжика", в "Центр управления сетями... бла бла бла", там "брандмауер Windows" внизу слева, а там "Включение / отключение" вверху слева. ну и там уже заветные...
мне помогло.
мне помогло.
-
- Сообщения: 104
- Зарегистрирован: Вт май 12, 2015 9:59 pm
- Благодарил (а): 16 раз
- Поблагодарили: 13 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Господа! Не могу отключить фаирвол не от не знаний, а от этических соображений! Это детские компьютера, он мне блокируют выход в инет нежелательного софта. Может кто подскажет, какой службе дать добро, чтоб пинги пролетали?
Отправлено с моего SM-T116 через Tapatalk
Отправлено с моего SM-T116 через Tapatalk
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Пингуем устройства. Как быть? Устройства Online.
Поставьте нормальный файрвол, в котором настраиваются правила.
Сам использую Kaspersky Internet Security, там вполне человеческие настройки.
А служба - ICMP ping должна называться, или ICMP эхо
Сам использую Kaspersky Internet Security, там вполне человеческие настройки.
А служба - ICMP ping должна называться, или ICMP эхо
-
- Сообщения: 104
- Зарегистрирован: Вт май 12, 2015 9:59 pm
- Благодарил (а): 16 раз
- Поблагодарили: 13 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Спасибо за ответ! Буду дома - опробую
Отправлено с моего SM-T116 через Tapatalk
Отправлено с моего SM-T116 через Tapatalk
-
- Сообщения: 968
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 71 раз
- Поблагодарили: 95 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Ну что, друзья, никаких мыслей больше нет? Намучался я уже с семейными Iphone - не пингуются по человечески, хоть тресни. Раз минут в 15 пинг проходит.
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Пингуем устройства. Как быть? Устройства Online.
Господа, нужна помощь!
Имеем три сетевых устройства, от которых получаем данные. Объекты в МД заведены с именами client_plc1, client_plc2, client_plc3. Данные получаем с помощью модуля TCP-sockets. Модуль создает (и держит) соединения по ip-адресу и порту устройства, в это время устройства на пинги не отвечают. Т.ч. модуль Устройства OnLine (pinghost) для использования не подходит. Как мне отслеживать соединения с устройствами?
Сам модуль TCP-sockets ведёт табличку (Sockets) с полями ID, TITLE, IP, PORT, STATUS (0, client_plc1, 192.168.100.1, 9999, 1) и в случае разрыва соединения пишет в STATUS 0 или 1 - если соединение установлено.
Помогите (можно кодом сценария) вытащить из этой таблицы статусы. Нужен код перебора устройств из таблицы и соответственно, запись в свойства объекта в МД (например, client_plc1.deviceOnline) статуса соединения.
Или думаю лучше сразу в файле модуля TCP-sockets задавать значения свойств объекта, правда не знаю как. Нужна помощь.
Вот код файла cycle_TCP_socket.php
Имеем три сетевых устройства, от которых получаем данные. Объекты в МД заведены с именами client_plc1, client_plc2, client_plc3. Данные получаем с помощью модуля TCP-sockets. Модуль создает (и держит) соединения по ip-адресу и порту устройства, в это время устройства на пинги не отвечают. Т.ч. модуль Устройства OnLine (pinghost) для использования не подходит. Как мне отслеживать соединения с устройствами?
Сам модуль TCP-sockets ведёт табличку (Sockets) с полями ID, TITLE, IP, PORT, STATUS (0, client_plc1, 192.168.100.1, 9999, 1) и в случае разрыва соединения пишет в STATUS 0 или 1 - если соединение установлено.
Помогите (можно кодом сценария) вытащить из этой таблицы статусы. Нужен код перебора устройств из таблицы и соответственно, запись в свойства объекта в МД (например, client_plc1.deviceOnline) статуса соединения.
Или думаю лучше сразу в файле модуля TCP-sockets задавать значения свойств объекта, правда не знаю как. Нужна помощь.
Вот код файла cycle_TCP_socket.php
Код: Выделить всё
<?php
chdir(dirname(__FILE__) . '/../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
set_time_limit(0);
// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");
include_once(DIR_MODULES . "control_modules/control_modules.class.php");
$ctl = new control_modules();
include_once(DIR_MODULES . 'TCP_socket/TCP_socket.class.php');
$TCP_socket_module = new TCP_socket();
$TCP_socket_module->getConfig();
$tmp = SQLSelectOne("SELECT ID FROM Sockets LIMIT 1");
if (!$tmp['ID'])
exit; // no devices added -- no need to run this cycle
echo date("H:i:s") . " running " . basename(__FILE__) . PHP_EOL;
$latest_check = 0;
$ping_cnt = 0;
$execute = true;
$checkEvery = 1; // poll every 1 seconds
$ping_esc = 4; // escape polling (for ping only)
while (1)
{
setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
if ((time()-$latest_check)>=$checkEvery)
{
$latest_check=time();
echo "\r\n".date('Y-m-d H:i:s').' Polling devices...\r\n';
$TCP_socket_module->processCycle();
// Получаем все сокеты из БД
$sockets = SQLSelect("SELECT * FROM Sockets");
$total = count($sockets);
for($i = 0; $i < $total; $i++)
{
$sock = $sockets[$i];
$IP = $sock['IP'];
$port = $sock['PORT'];
// Пинг IP
$online = ping(processTitle($sock['IP']));
if($online)
{
if($execute)
{
// Пинг сокета
$out = "ping";
$res = socket_sendto($socket[$i], $out, strlen($out), 0, $IP, $port);
if(!($res != 0))
{
$sock['STATUS'] = '0';
// Создаём TCP/IP сокет
$socket[$i] = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!($socket[$i] === false))
{
socket_set_option($socket[$i], SOL_SOCKET, SO_RCVTIMEO, array("sec"=>0,"usec"=>10000)); // Ждать новые данные 10ms
// Подключаем TCP/IP сокет
$result = socket_connect($socket[$i], $IP, $port);
if (!($result === false))
{
$sock['STATUS'] = '1';
}
// else
// {
// echo "\r\nFail socket_connect(): reason: ($result) " . socket_strerror(socket_last_error($socket[$i])) . "\r\n";
// }
}
// else
// {
// echo "\r\nFail socket_create(): reason: " . socket_strerror(socket_last_error()) . "\r\n";
// }
}
else
{
$sock['STATUS'] = '1';
}
}
// Чтение сокета
$read_buf = '';
$code = '';
$res = socket_recv($socket[$i], $read_buf, 255, 0);
// if(!($res != 0))
// {
// echo "\r\nFail to read socket at addres ".$IP."and port ".$port."\r\n";
// }
//echo "Bytes receive:".$res."\r\n";
// Получаем все каналы из БД
$channels = SQLSelect("SELECT * FROM Channels WHERE DEVICE_ID=($i + 1)");
$cnt = count($channels);
for($j = 0; $j < $cnt; $j++)
{
$chan = $channels[$j];
if($chan['LINKED_OBJECT']!='' && $chan['LINKED_PROPERTY']!='')
{
if(preg_match('\'^GET\\([0-9]{1,}\\)$\'', $chan['VALUE']))
{
preg_match('\'[0-9]{1,}\'', $chan['VALUE'], $val);
$pos = strpos($read_buf, $chan['TITLE']);
if(!($pos === false))
{
//setGlobal($chan['LINKED_OBJECT'].'.'.$chan['LINKED_PROPERTY'], $val[0]);
//$danye = strlen($read_buf)-strlen($chan['TITLE']);
$str_command = strlen($chan['TITLE']);
$str_code = strlen($read_buf)-strlen($chan['TITLE']);
$code = substr($read_buf,$str_command,$str_code);
setGlobal($chan['LINKED_OBJECT'].'.'.$chan['LINKED_PROPERTY'], $code);
}
}
if(preg_match('\'^SET\\([0-9]{1,}\\)$\'', $chan['VALUE']))
{
preg_match('\'[0-9]{1,}\'', $chan['VALUE'], $val);
$status_new = getGlobal($chan['LINKED_OBJECT'].'.'.$chan['LINKED_PROPERTY']);
$status_old = $chan['STATUS'];
if($status_new === $val[0])
{
if($status_new != $status_old)
{
$write_buf = $chan['TITLE'];
// Запись сокета
$res = socket_sendto($socket[$i], $write_buf, strlen($write_buf), 0, $IP, $port);
// if(!($res != 0))
// {
// echo "\r\nFail to write socket at addres ".$IP."and port ".$port."\r\n";
// }
// echo "Bytes send:".$res."\r\n";
usleep(10000); // Небольшая (10ms) задержка после записи сокета
}
}
$chan['STATUS'] = $status_new;
}
}
SQLUpdate('Channels', $chan);
}
}
else
{
$sock['STATUS'] = '0';
}
SQLUpdate('Sockets', $sock);
}
$ping_cnt++;
if($ping_cnt > $ping_esc)
{
$ping_cnt = 0;
$execute = true;
}
else
{
$execute = false;
}
}
if (file_exists('./reboot') || IsSet($_GET['onetime']))
{
$db->Disconnect();
exit;
}
//sleep(1);
}
DebMes("Unexpected close of cycle: " . basename(__FILE__));
-
- Сообщения: 1570
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 40 раз
- Поблагодарили: 578 раз
Re: Пингуем устройства. Как быть? Устройства Online.
Ну, например, перед SQLUpdate('Sockets', $sock);Lerych писал(а): ↑Вт фев 19, 2019 9:08 pmГоспода, нужна помощь!
Имеем три сетевых устройства, от которых получаем данные. Объекты в МД заведены с именами client_plc1, client_plc2, client_plc3. Данные получаем с помощью модуля TCP-sockets. Модуль создает (и держит) соединения по ip-адресу и порту устройства, в это время устройства на пинги не отвечают. Т.ч. модуль Устройства OnLine (pinghost) для использования не подходит. Как мне отслеживать соединения с устройствами?
Сам модуль TCP-sockets ведёт табличку (Sockets) с полями ID, TITLE, IP, PORT, STATUS (0, client_plc1, 192.168.100.1, 9999, 1) и в случае разрыва соединения пишет в STATUS 0 или 1 - если соединение установлено.
Помогите (можно кодом сценария) вытащить из этой таблицы статусы. Нужен код перебора устройств из таблицы и соответственно, запись в свойства объекта в МД (например, client_plc1.deviceOnline) статуса соединения.
Или думаю лучше сразу в файле модуля TCP-sockets задавать значения свойств объекта, правда не знаю как. Нужна помощь.
написать
Код: Выделить всё
setGlobal($sock['TITLE'] . '.deviceOnline',$sock['STATUS']);
- Рейтинг: 1.16%