Pinging ip с портом, ничего не возвращает, PHP / APACHE

Я использую следующее, чтобы получить статус и 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');