Пингует ip с портом, ничего не возвращает, PHP / APACHE - PullRequest
0 голосов
/ 18 октября 2011

Я использую следующее для получения статуса и IP или домена

<?php
 system('ping -c1 -w1 193.33.186.70') ;
?>

Как бы я пропинговал порт 80 tho?Ничего не возвращает вообще, как только порт предоставлен .. попытался добавить его в конец с помощью ': 80' и '80'

Любые идеи оценены!

Ответы [ 4 ]

4 голосов
/ 18 октября 2011

Если вы хотите выяснить, будет ли данный хост принимать 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, но также и другие) не ведут себя таким образом, и дейтаграммы не будут подтверждены, пока наложенный протокол прикладного уровня не реализует его.

Тот факт, что вы задаете этот вопрос вэтот способ говорит мне, что у вас есть фундаментальный пробел в ваших знаниях по протоколам Transport Layer .Вы должны прочитать о ICMP и TCP , а также Модель OSI .

2 голосов
/ 18 октября 2011
Команда

Ping использует не протокол TCP, а протокол ICMP.Таким образом, вы не можете использовать TCP-порт 80.

Вы можете использовать fsockopen () или cURL для проверки связи с сервером и gethostbyaddr () получить доменное имя.

1 голос
/ 18 октября 2011

Как правило, вы не можете пропинговать порт: ping работает по протоколу ICMP, у которого нет абстракции порта.

Если вы хотите просто проверить, активен ли данный порт, используйте сокеты(для порта 80) curl.

0 голосов
/ 18 октября 2011

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...