Есть ли способ проверить, работает ли хост? - PullRequest
1 голос
/ 14 января 2011

Я пытаюсь сделать это на PHP.Мне нужно проверить, работает ли указанный хост "up"

Я думал о проверке ping на указанном хосте (хотя я не уверен, как мне это понадобится, поскольку для этого потребуется root.*

Я также хотел бы использовать fsockopen(), чтобы попытаться подключиться к указанному порту, но это также не получилось бы, если бы хост не прослушивал соединения на этом порту.блокировать запросы ping, так как я могу обойти это?Эта часть не является необходимостью, так что не беспокойтесь об этом слишком много.Я понимаю, что это может быть сложно.

Ответы [ 4 ]

4 голосов
/ 14 января 2011

Обычно я делаю простой cURL для общедоступной страницы и проверяю, возвращает ли он 200. Если вы получаете 500, 404 или что-то еще, кроме ответа 200, вы знаете, что что-то подозрительное.

3 голосов
/ 14 января 2011

Краткий ответ: нет хорошего универсального способа сделать это.Ping примерно настолько близок, насколько это возможно (почти все хосты будут реагировать на это), но, как вы заметили, в PHP обычно требуется root-доступ для использования низкого порта.

Позволяет ли ваш хост выполнять системные вызовы, чтобы вы могли выполнить команду ping на уровне ОС и затем проанализировать результаты?Вероятно, это ваш лучший выбор.

$result = exec("ping -c 2 google.com");

Если хост блокирует запрос ping, вы можете сделать более общий просмотр портов для поиска других открытых портов (но это довольно грубо, не делайте этогодля хостов, которые не дали вам конкретного разрешения). Nmap - хороший инструмент для этого.Он использует немало хитростей, чтобы выяснить, работает ли хост и какие сервисы могут работать, а какие нет.Будьте осторожны, так как некоторые провайдеры общего хостинга прекратят действие вашей учетной записи за «хакерскую активность», если вы установите и используете Nmap, особенно в отношении хостов, которые вы не контролируете или не имеете разрешения на зондирование.

Помимо этого, если вына том же некоммутируемом уровне Ethernet, что и другой хост (например, если вы находитесь в той же открытой сети Wi-Fi), адаптер Ethernet в случайном режиме может прослушивать трафик с хоста и обратно, даже если он не отвечает непосредственно на вас.

1 голос
/ 14 января 2011

Вы можете использовать cURL

$url = 'yoururl';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode) {
    // All's well
} else {
    // not so much
}
0 голосов
/ 14 января 2011

Чтобы хост вообще контролировался, должен быть открыт хотя бы один порт.Является ли хост веб-сервером?Если это так, вы можете просто открыть соединение с портом 80, если он успешно открыт, тогда хотя бы какая-то часть хоста работает.

Лучшим решением было бы иметь скрипт, доступный через Интернет дляваш монитор, а затем вы можете открыть соединение с ним, и этот скрипт будет возвращать различные биты системной информации.

РЕДАКТИРОВАТЬ -

Насколько тщательным вы хотите, чтобы этот тест был?[сервер включен] -> [работает Apache] -> [веб-приложение работает] Все разные уровни работы.То, что apache возвращает что-то, показывает, что сервер включен, но не то, что ваше веб-приложение запущено.(Я понимаю, что у вас может не быть ничего подобного, но я надеюсь, что это полезный пример)

РЕДАКТИРОВАТЬ -

Стоит ли устанавливать легкий http-сервер (я имею в виду очень легкий) только для мониторинга?

Не удалось бы установить что-то на хостах, которые звонили домой так часто, чтобы показать, что они работают?

...