2010-06-13 3 views
0

Это немного беспокоило меня, может кто-нибудь покажет мне, как пинговать встречный ударный сервер.Pinging CS Servers

Я просто хочу пинговать сервер и посмотреть, есть ли он в сети, вот и все.

Я нашел много небольших фрагментов в Интернете, которые использовали fsock и UDP для этого, но ни один из них на самом деле не выполнял работу, которую я хотел сделать.

Большинство из тех, что я нашел, показывали офлайн-серверы как онлайн.

Я действительно очень признателен, если бы кто-то мог предоставить мне эту полезную информацию (код).

Заранее спасибо^_^

ответ

0

Два варианта с верхней части моей головы:

fsockopen:

http://www.phptoys.com/e107_plugins/content/content.php?content.41

Net_Ping груша пакет:

http://www.codediesel.com/php/ping-a-server-using-php/

Использование IP-сервера CS.

+0

Спасибо, первая ссылка я нашел уже, но это не делает работа. Вторая ссылка - это что-то вроде того, что мне нужно - но для этого требуется много вещей, которые у меня были бы, только если бы у меня был доступ root. Недостаточно того, что он требует, отключен на моем сервере (например, функция exec()). – Zubair1

0

Получить ClanManager и иметь модули для проверки статуса CS-сервера.

Это файл с примерами говорить с серверами CS,

http://clanmanager.cvs.sourceforge.net/viewvc/clanmanager/ocm/server/counterstrike.inc?revision=1.3&view=markup

+0

Спасибо за ссылку - код выглядит на этом классе выглядит довольно устаревшим, а не тем, что меня интересует. Я не хочу запрашивать сервер за его информацией, мне просто нужно его пронести, чтобы проверить только, что он в сети и в живых. http://gameq.sourceforge.net лучше, чем выше, если бы мне пришлось выбирать. – Zubair1

0

Вы также можете сделать то, что известно как TCP пинг. В принципе, вы просто подключаетесь, а затем отключаетесь без какой-либо связи. Если соединение завершается успешно, вы знаете, что сервер встал, если он не работает, он отключен. Когда я говорю сервер, я имею в виду интересующую вас программу, а не физический сервер.

1

вы не можете просто пинговать сервер, так как он использует UDP вместо обычного TCP, поэтому, чтобы проверить его статус, вам нужно «запросить» сервер, вы можете найти информацию о том, какую команду вы можете отправить на серверы CS здесь: http://developer.valvesoftware.com/wiki/Server_queries#A2A_PING

В любом случае, для проверки статуса сервера CS может использоваться следующий код (PHP).

`

` $ сокет = socket_create (AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect ($ socket, "cs.somesv.com", 27015);

socket_write($socket, "\xFF\xFF\xFF\xFF\x69"); 

    if (@socket_read($socket, 5) == "\xFF\xFF\xFF\xFF\x6A") { 
     echo '<FONT COLOR=lime>Online</FONT>'; 
    } else { 
     echo '<FONT COLOR=red>Offline</FONT>'; 
    } 

    socket_close($socket); 
?>` 

Bah! эти блоки кода действительно не работают нормально! :(

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

0

Вот функция PHP, чтобы проверить, если сервер CS на сайте:

function isCsServerOnline($server, $port = 27015) 
{ 
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 

    // timeout 1.5 seconds 
    $timeout = array('sec' => 1, 'usec' => 500000); 
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout); 
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); 

    @socket_connect($socket, $server, $port); 
    @socket_write($socket, "\xFF\xFF\xFF\xFF\x69"); 

    $isOnline = @socket_read($socket, 5) == "\xFF\xFF\xFF\xFF\x6A"; 
    @socket_close($socket); 

    return $isOnline; 
} 

Вы можете использовать его как это:

$server = 'some.cs.server'; 
$port = 27015; 

$isOnline = isCsServerOnline($server, $port); 
echo $isOnline ? 'Online' : 'Offline';