Я использую следующее, чтобы получить статус и IP-адрес или домен
<?php system('ping -c1 -w1 193.33.186.70') ; ?>
Как я буду пинговать порт 80? Возвращает ничего не сразу после того, как порт поставлен. Попытался добавить его в конец по:: 80 и 80,
Любые идеи могут быть восприняты!
Если вы хотите узнать, будет ли данный хост принимать TCP-соединения на порту 80, вы можете сделать это:
$host = '193.33.186.70'; $port = 80; $waitTimeoutInSeconds = 1; if ($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) { // It worked } else { // It didn't work } fclose($fp);
Для чего угодно, кроме TCP, будет сложнее (хотя, поскольку вы указываете 80, я думаю, вы ищете активный HTTP-сервер, поэтому TCP – это то, что вы хотите). TCP упорядочен и подтвержден, поэтому вы будете неявно получать возвращенный пакет, когда соединение будет успешно выполнено. Большинство других транспортных протоколов (как правило, UDP, но и другие) не ведут себя таким образом, и датаграммы не будут подтверждаться, если наложенный протокол Application Layer не реализует его.
Тот факт, что вы задаете этот вопрос таким образом, говорит мне, что у вас есть фундаментальный пробел в ваших знаниях в протоколах транспортного уровня . Вы должны прочитать ICMP и TCP , а также модель OSI .
Команда Ping не использует протокол TCP
, а протокол ICMP
. Таким образом, вы не можете использовать TCP-порт 80.
Вы можете использовать fsockopen () или cURL для ping сервера и gethostbyaddr (), чтобы получить доменное имя.
Как правило, вы не можете пинговать порт: ping
работает через ICMP, у которого нет абстракции порта.
Если вы хотите просто проверить, активен ли данный порт, используйте сокеты или (для порта 80) curl
.
ping отправляет ICMP-пакеты. Чтобы проверить TCP-порт, вам необходимо отправить TCP-пакеты.
Однако даже открытие и немедленное закрытие TCP-соединения обычно не то, что вы хотите. Вместо этого просто проверьте службу, которую вы ожидаете там. Например, чтобы проверить, работает ли HTTP-сервер:
<?php $ch = curl_init("http://www.example.com/"); curl_setopt($ch, CURLOPT_NOBODY, true); $ping_result = curl_exec($ch); curl_close($ch); echo 'Service ' . ($ping_result ? 'up' : 'down');