Ping port средствами php

#1 2 апреля 2015 в 21:03
Как можно пропинговать ip:port игрового сервера?

Делаю
  1.  
  2. echo exec("ping -c 1 -i 1 62.210.151.59");
  3.  
пинг выводит отлично, но если добавить к ip порт, то сервер не пингуется

Как можно то решить?
#2 2 апреля 2015 в 21:41
Rossoman, ping не пингует порт, ru.wikipedia.org/wiki/Ping
Попробуйте, например, telnet'ом присоединиться на нужный порт.
#3 2 апреля 2015 в 21:53
Fuze, у меня получилось получить ответ через
  1. stream_socket_client("tcp://62.210.151.59:29000", $errno, $errstr, 30);
только в ответе кракозябры, и не пойму что за кодировка

p.s. через telnet ответ такой же
#4 2 апреля 2015 в 22:18
Нашел еще такое решение на просторах
  1.  
  2. function ping($host, $port, $timeout = 10) {
  3. $ta = microtime(true);
  4. if($fp = fsockopen($host, $port, $errno, $errstr, $timeout)){
  5. $tb = microtime(true);
  6. fclose($fp);
  7. return round((($tb - $ta) * 1000), 0)." ms";
  8. } else { return "DOWN"; }
  9. }
  10. ping("www.google.com", 80, 10);
  11.  
работает. Только пинг выдает уж очень маленький. Около 0.4 ms, в то время как здесь
www.letmecheck.it/tcp-ping.php
Здесь выдает около 60 ms
#5 2 апреля 2015 в 22:30
icmp работает по 1 порту и возможности его изменить нет.
поэтому пинг не получится.
Возможно при обращении к этому порту можно получить какое то сообщение через telnet как предложил Fuze
#6 2 апреля 2015 в 22:38
eoleg, я ж говорю ответ есть, и через telnet, и через fsockopen и через stream_socket_client
Только не пойму в какой он кодировке
ну и собственно проблема в этом

работает. Только пинг выдает уж очень маленький. Около 0.4 ms, в то время как здесь
www.letmecheck.it/tcp-ping.php
Здесь выдает около 60 ms

eoleg
#7 3 апреля 2015 в 00:53
telnet выдает
  1.  
  2. Array ( [0] => Trying 62.210.151.59... [1] => Connected to 62.210.151.59. [2] => Escape character is '^]'. )
  3.  
и все…
#8 3 апреля 2015 в 09:03

telnet выдает

Rossoman
Смотрите в массиве ячейку 2, если она есть, не пустая и присутствует "Escape character", значит порт открыт.
#9 3 апреля 2015 в 09:23

Смотрите в массиве ячейку 2, если она есть, не пустая и присутствует "Escape character", значит порт открыт

Fuze
да порт открыт.
Но как можно получить именно сетевые задержки при обращении к этому порту?

Фактически мне нужно получить ответ, аналогичный консольной команде ping, только для порта.
#10 3 апреля 2015 в 10:03
Интересно, а правильно ли будет считать пинг через traceroute host port и последующим сложением задержек каждого соединения??
#11 3 апреля 2015 в 12:27

правильно ли будет считать

Rossoman
правильным будет то, посредством чего вы достигните нужный вам результат.
Зачем вам пинговать порт, если вам важны сетевые задержки? Просто пингуйте и все.

да порт открыт.

Rossoman
Как я понял, вам и нужно было проверять открыт ли порт. На это и вам попробовали ответить. Если в ответе нет "Escape character", значит порт закрыт.
Задержки проверить однозначно проблематично, т.к. с вашего хоста будут одни задержки, с другого хоста другие. В php тогда стартуйте таймер перед выполнением коннекта, после успешного коннекта вычисляйте время, вот и все, т.к. все равно это значение будет очень приблизительное и неоднозначное.
#12 3 апреля 2015 в 14:03

Как я понял, вам и нужно было проверять открыт ли порт. На это и вам попробовали ответить. Если в ответе нет "Escape character", значит порт закрыт.

Fuze
Да, согласен, изначально не так объяснил, нужны именно сетевые задержки. Но Ваше объяснение с telnet очень помогло, ибо до этого не мог до порта достучаться вовсе.

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

Fuze
Так и делаю, но задержки ко всем проверяемым серверам очень маленькие (от 0.1 ms до max 9 ms). В то время как на многих онлайн сервисах при проверке тех же серверов, выдаются задержки примерно в 10-15 раз большие
#13 3 апреля 2015 в 14:07

Зачем вам пинговать порт, если вам важны сетевые задержки? Просто пингуйте и все.

Fuze
Здесь не совсем понял. Если мне нужно получить задержки игрового сервера, который распологается ip:port, например 1.1.1.1:29000, то мне достаточно просто пинговать 1.1.1.1 чтобы получить сетевые задержки?
#14 3 апреля 2015 в 15:56
Задержки по сети будут такие как покажет ping.
Другое дело это задержки в ответах самой программы — игрового сервера, ну тоесть сам игровой сервер будет отвечать с задержкой, при большой нагрузке например.
тогда общая задержка будет равна сумме ринга и задержки в ответе от игрового сервера
#15 3 апреля 2015 в 16:13
Честно, я не особо понимаю в администрировании серверов, и все что с этим рядом))
Для меня еще вчера пинг и сетевые задержки были одно и тоже)))
Но до истины все равно докопаюсь)

Другое дело это задержки в ответах самой программы — игрового сервера, ну тоесть сам игровой сервер будет отвечать с задержкой, при большой нагрузке например.

eoleg
Вот именно эти задержки мне и нужно получить. Но как это можно сделать средствами php, или js, а может есть какой то скрипт для linux?

Я так понимаю что как вариант еще можно использовать соккеты. Подключиться к соккету, отправить запрос (fwrite), получить ответ (fread), закрыть соединение. И средствами php естественно посчитать время выполнения.
К соккету подключиться получается, но какой запрос можно отправить серверу? Можно отправить 1 цифру, а можно предложение на кириллице, и естественного время выполнения будет абсолютно разное. Какой наиболее верный запрос нужно отправлять серверу чтобы получить от него ответ?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.