Erreur 111 rcon Minecraft

erimen Messages postés 521 Date d'inscription   Statut Membre Dernière intervention   -  
erimen Messages postés 521 Date d'inscription   Statut Membre Dernière intervention   -
Salut,
J'essaye d'envoyer des commandes à mon serveur Minecraft via mon site.
Le serveur web et le serveur Minecraft sont hébergés sur la même machine et c'est un serveur dédié donc full accès.
Le port RCon est 25566 et j'ai définis un mot de passe que je définirai par "mdp" ici.
J'ai donc trouvé deux fichiers en fouillant sur le net mais j'ai une erreur : "Unable to open socket: Connection refused (111)"
Voici le contenu des deux fichiers :
Fichier que j'exécute :
<?php
	include_once("rcon.php");
 
	// Extend the rcon class to tweak it for minecraft.
	class minecraftRcon extends rcon{
		function mcSendCommand($Command){
			$this->_Write(SERVERDATA_EXECCOMMAND,$Command,'');
		}
		function mcRconCommand($Command){
			$this->mcSendcommand($Command);
			$ret = $this->Read();
			return $ret[$this->_Id]['S1'];
		}
	}
 
	// Server connection varialbes
	$server = "localhost";
	$rconPort = 25566;
	$rconPass = "mdp";
 
	// Connect to the server
	$r = new minecraftRcon($server, $rconPort, $rconPass);
 
	// Authenticate, and if so, execute command(s)
	if ( $r->Auth() ) {
		echo "Authenticated !<br>";
 
		// Send a command
		var_dump($r->mcRconCommand('say Ca marche !'));
	}else{
		echo "Authentification failed !<br>";
	}
?>


Contenu de "rcon.php"
<?php
/*
    Basic CS:S Rcon class by Freman.  (V1.00)
    ----------------------------------------------
    Ok, it's a completely working class now with with multi-packet responses
 
    Contact: printf("%s%s%s%s%s%s%s%s%s%d%s%s%s","rc","on",chr(46),"cl","ass",chr(64),"pri","ya",chr(46),2,"y",chr(46),"net")
 
    Behaviour I've noticed:
        rcon is not returning the packet id.
*/
 
define("SERVERDATA_EXECCOMMAND",2);
define("SERVERDATA_AUTH",3);
 
class RCon {
    var $Password = "mdp";
    var $Host = "127.0.0.1";
    var $Port = 25566;
    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'];
    }
}
?>


Voilà, si vous avez besoin de plus d'info n'hésitez pas à demander ;)
Et merci déjà à ceux qui prendront la peine de se pencher sur mon problème :)

PS :
Dans server.properties j'ai :
enable-rcon=true
rcon.port=25566
rcon.password=mdp

Et j'ai ouvert les ports comme suit :
iptables -I INPUT -p TCP --dport 25566 -j ACCEPT
iptables -I INPUT -p UDP --dport 25566 -j ACCEPT
iptables -I OUTPUT -p TCP --dport 25566 -j ACCEPT
iptables -I OUTPUT -p UDP --dport 25566 -j ACCEPT
A voir également:

1 réponse

erimen Messages postés 521 Date d'inscription   Statut Membre Dernière intervention   78
 
Problème résolu. Voir https://openclassrooms.com/forum/sujet/erreur-rcon-111#message-85616454, là au moins on m'a vraiment aidé.
0