[PHP] Unable to open socket: Connection timed out (110)

0

Witam, mam skrypt do wysyłania komend do zdalnej konsoli serwera gry Counter-Strike (RCON), udało mi się go znaleźć na internecie, lecz jest z nim problem, gdy próbuje go wykonać na swoim hostingu wywala błąd "Unable to open socket: Connection timed out (110)", zainstalowałem kompilator PHP na komputerze z systemem Windows, lecz po próbie wykonania na komputerze tego samego skryptu dostaję komunikat:
"Unable to open socket: Próba połączenia nie powiodła się, ponieważ połączona strona nie odpowiedziała poprawnie po ustalonym okresie czasu lub utworzone połączenie nie powiodło się, ponieważ połączony host nie odpowiedział. (10060)"

<?php

// rcon.php
define("SERVERDATA_EXECCOMMAND",2);  
define("SERVERDATA_AUTH",3);  
  
class RCon {  
var $Password = "haslo";  
var $Host = "127.0.0.1";  
var $Port = 27015;  
var $_Sock = null;  
var $_Id = 0;  
  
function RCon ($Host,$Port,$Password) {  
  $this->Password = $Password;  
  $this->Host = $Host;  
  $this->Port = $Port;  
  $this->_Sock = @fsockopen($this->Host,$this->Port, $errno, $errstr, 30) or  
      die("Unable to open socket: $errstr ($errno)\n");  
  $this->_Set_Timeout($this->_Sock,2,500);  
    }  
  
function Auth () {  
  $PackID = $this->_Write(SERVERDATA_AUTH,$this->Password);  
  
  // Real response (id: -1 = failure)  
  $ret = $this->_PacketRead();  
  if ($ret[1]['id'] == -1) {  
  die("Authentication Failure\n");  
  }  
}  
  
function _Set_Timeout(&$res,$s,$m=0) {  
  if (version_compare(phpversion(),'4.3.0','<')) {  
  return socket_set_timeout($res,$s,$m);  
  }  
  return stream_set_timeout($res,$s,$m);  
}  
  
function _Write($cmd, $s1='', $s2='') {  
  // Get and increment the packet id  
  $id = ++$this->_Id;  
  
  // Put our packet together  
  $data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);  
  
  // Prefix the packet size  
  $data = pack("V",strlen($data)).$data;  
  
  // Send packet  
  fwrite($this->_Sock,$data,strlen($data));  
  
  // In case we want it later we'll return the packet id  
  return $id;  
}  
  
function _PacketRead() {  
  //Declare the return array  
  $retarray = array();  
  //Fetch the packet size  
  while ($size = @fread($this->_Sock,4)) {  
  $size = unpack('V1Size',$size);  
  //Work around valve breaking the protocol  
  if ($size["Size"] > 4096) {  
    //pad with 8 nulls  
    $packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096);  
  } else {  
    //Read the packet back  
    $packet = fread($this->_Sock,$size["Size"]);  
  }  
  array_push($retarray,unpack("V1ID/V1Response/a*S1/a*S2",$packet));  
  }  
  return $retarray;  
}  
  
function Read() {  
  $Packets = $this->_PacketRead();  
  
  foreach($Packets as $pack) {  
  if (isset($ret[$pack['ID']])) {  
    $ret[$pack['ID']]['S1'] .= $pack['S1'];  
    $ret[$pack['ID']]['S2'] .= $pack['S1'];  
  } else {  
    $ret[$pack['ID']] = array(  
    'Response' => $pack['Response'],  
    'S1' => $pack['S1'],  
    'S2' =>$pack['S2'],  
    );  
  }  
  }  
  return $ret;  
}  
  
function sendCommand($Command) {  
  $Command = '"'.trim(str_replace(' ','" "', $Command)).'"';  
  $this->_Write(SERVERDATA_EXECCOMMAND,$Command,'');  
}  
  
function rconCommand($Command) {  
  $this->sendcommand($Command);  
  
  $ret = $this->Read();  
  
  //ATM: Source servers don't return the request id, but if they fix this the code below should read as  
  // return $ret[$this->_Id]['S1'];  
  return $ret[0]['S1'];  
}  
}  
  
 $r = new rcon("127.0.0.1", 27015, "haslo");  
 $r->Auth();  
  
 echo "Authenticated\n";  
  
 //Send a request  
 $r->rconCommand("say TEST");  
 $r->rconCommand("changelevel de_nuke");  

?>
0

Web panel piszemy? Idea dobra, tylko nie pamiętam... czy RCON nie łączy się przypadkiem przez UDP?

$r = new rcon("udp://127.0.0.1", 27015, "haslo");
0

http://mgx8.info/inne/rcon16.php

Na to wychodzi, że operacja Auth() zostaje wykonana bez problemu, lecz na serwerze nie zostaje dalej wykonana komenda.

Jakieś pomysły?

0

Nie wiem, pierwsza dziwna rzecz którą widzę to to, że komendy (string) pakujesz jako unsigned long (flaga V). Podebuguj po stronie serwera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1