Проверьте, включен ли компьютер
Я написал простую страницу php, которая отправляет пакеты wake-on-lan на пару моих компьютеров, на которых установлена Windows 7.
Как я могу проверить, включены ли компьютеры (при условии, что на месте работает интернет)?
Можно ли как-нибудь пинговать компьютер при загрузке страницы, чтобы проверить ответ?
Дополнительная информация: Все компьютеры находятся в разных местах, где у них есть динамическая настройка DNS для IP-адреса, и все они находятся за маршрутизатором с другими компьютерами.
2 ответа
Я могу удаленный рабочий стол всех компьютеров через Windows RDC, я открыл порт 3389 для них, а также отдельный порт WOL, чтобы у них было два открытых порта
Тогда попробуйте открыть сеанс удаленного рабочего стола?
<?php
$timeout = 10;
$socket = @fsockopen( 'ip-of-the-client', 3389, $errno, $errstr, $timeout );
$online = ( $socket !== false );
var_dump( $online );
@
в коде, потому что fsockopen выдаст предупреждение PHP, когда соединение не может быть установлено.
РЕДАКТИРОВАТЬ: ради ясности; 3389 - это порт по умолчанию, используемый для создания подключения к удаленному рабочему столу.
В соответствии с этим:
Я могу удаленно подключить все компьютеры через Windows RDC, я открыл для них порт 3389, а также отдельный порт WOL, чтобы у них было два открытых порта.
Лучше всего (кроме пинга ICMP, который может быть заблокирован), поскольку RDP открыт, вероятно, было бы открыть TCP-сокет для порта 3389, который подтвердил бы, что компьютер подключен к сети и полностью загружен (т.е. работает служба RDP).,
Просто сделайте это с помощью fsockopen, вот так:
function ServiceOnline($ip, $port = 3389) {
$rdp_sock = @fsockopen($ip, $port, null, null, 5); // 5 sec timeout so that it doesn't hang for a whole minute if not available
if (!$rdp_sock) {
return false;
} else {
fclose($rdp_sock);
return true;
}
}
Вы также можете использовать этот код, если другой сервис доступен как запасной вариант, например, путем передачи $port
аргумент.