DEDIBOX-NEWS.COM

Le Forum Non Officiel de la DEDIBOX

Vous n'êtes pas identifié.

#1 2006-05-07 23:20:13

LaurentB
Invité

Démarrer, arreter relancer un serveur de jeux via une interface Web

Voila je vais installer un serveur de jeux sur ma debidox et je suis a la recherche d'un moyen me permettant de démarrer, arreter, le serveur de jeux via une interface php, j'ai déja trouvé tout un tas de script que je n'ai jamais réussi a mettre en exploitation

L'idéal serait également de pouvoir editer toujours via une interface Web certains fichier de configuration du jeux ex: server.cfg, mapcycle, etc...


J'ai contacter divers professionel, mais bien entendu il refuse de me dire comment ils font

 

#2 2006-05-07 23:26:01

Calimero
Maitre Jeidi
Lieu: 94 | 67
Date d'inscription: 2006-05-05
Messages: 2729

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Est-ce bien raisonnable ?
Une connexion SSH permet de faire ca de manière sécurisée, rapidement.

Je vais peut-être passer pour le rabat-joie de service, mais entre:

- <connexion SSH avec putty ou autre>
- /etc/init.d/monscript start (ou autre

et
- http://monserveur/monscript.php + authentification par un moyen sans doute plus mauvais que SSH
- clic sur un bouton

ben... moi je vois une perte de sécurité (sans vouloir présumer de tes capacités de développeur) + du temps perdu en développement/tests pour un gain minime en terme d'utilisation.

Sinon, php a des fonctions qui permettent l'exécution de commandes (avec les questions de droits que ca implique).

Hors ligne

 

#3 2006-05-07 23:31:47

LaurentB
Invité

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Tu as le chic pour me contrarier :blush:

 

#4 2006-05-07 23:36:59

Calimero
Maitre Jeidi
Lieu: 94 | 67
Date d'inscription: 2006-05-05
Messages: 2729

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Oui, je suis un vilain ! tongue

Allez, je t'aide (dans la mauvaise direction), en PHP tu as les fonctions de la "famille" exec:
http://fr.php.net/manual/fr/ref.exec.php

Dernière modification par Calimero (2006-05-07 23:37:10)

Hors ligne

 

#5 2006-05-08 10:52:03

pilou
Je débarque
Date d'inscription: 2006-05-05
Messages: 2

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Salut

LaurentB a écrit:

J'ai déja trouvé tout un tas de script que je n'ai jamais réussi a mettre en exploitation

Quelle genre de script? Tu peut donner les adresses ici ? big_smile

Hors ligne

 

#6 2006-05-09 09:58:28

Havran
Membre
Date d'inscription: 2006-05-09
Messages: 12

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Plusieurs solutions.

Soit tu utilises un logiciel édité par une entreprise, tout fait... Un exemple dans la liste non exhaustive ci dessous :
http://www.gamecreate.com/
http://www.gamecp.com/ (non entretenu aux dernières nouvelles)
http://phpua.sourceforge.net/

Ou alors tu le créé toi même... PHP est ton ami, il n'y a rien de compliqué, il faut simplement réfléchir, être méthodologique et coder proprement (utile pour le débug, enfin, inutile de le préciser).

Sinon, il est normal qu'aucun prestataire ne te dira ce qu'il a fait pour son panel de gestion de serveurs de jeux, car il n'a aucun interret à voir un concurrent se développer grâce à ses petits secrets industriels.

Hors ligne

 

#7 2006-05-11 18:24:53

openhoat
Petit scarabé
Date d'inscription: 2006-05-05
Messages: 68
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

J'utilise webmin pour démarrer/arrêter mon serv de jeux via le web.
Il suffit de développer le script dans /etc/init.d/mon_serv_de_jeux en s'inspirant des scripts existants...


OPen yOur miNd & leT tHe eSseNce Of thE uNiveRse flOw inTo yoUr SouL !

Hors ligne

 

#8 2006-08-21 18:09:56

XaTriX
Jeidi
Lieu: Toulouse
Date d'inscription: 2006-05-05
Messages: 161
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Merci pour les liens je vais consulter tout ça, je suis en train de mettre en place un site ou l'on pourra gerer les dédibox (en serveur de jeux ou autre) à distance que ça soit pour apache,php,sql,bind,ftp, et les serveurs de jeux. smile

XaT

Hors ligne

 

#9 2006-08-21 18:21:33

Mogui
D'honneur de membre
Lieu: 92 et 67
Date d'inscription: 2006-05-28
Messages: 1604
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

OU sinon, utilise la function php permettant d'executer des commandes SSH smile


Les gens normaux... croient que si ça marche, c'est qu'il n'y a rien à réparer.
Les ingénieurs croient que si ça marche, c'est que ça ne fait pas encore assez de choses.

Hors ligne

 

#10 2006-08-21 18:28:15

XaTriX
Jeidi
Lieu: Toulouse
Date d'inscription: 2006-05-05
Messages: 161
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Intéréssant, je me souviens avoir déjà débattu des fonctions à utiliser ou alors juste un cron qui execute un bash tout les X minutes, le bash étant généré par apache avec les infos voulues pour les choses à faire.
C'était pour de l'hébergement automatique je me souviens !
Je pense que je vais opter pour les fonctions ssh, cela permettra d'avoir une sorte de console qui va télécharger  et exécuté un bash .sh et qui fera le boulot pour les choses demandés smile

XaT

Hors ligne

 

#11 2006-08-22 23:19:48

goldyfruit
Membres d'honneurs
Lieu: 92500
Date d'inscription: 2006-06-19
Messages: 2722
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Delta67 a écrit:

OU sinon, utilise la function php permettant d'executer des commandes SSH smile

Je confirme cette solution est plus fiable que le shell_exec(), system() et exec().

Hors ligne

 

#12 2006-08-23 03:00:42

XaTriX
Jeidi
Lieu: Toulouse
Date d'inscription: 2006-05-05
Messages: 161
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

C'est ce que je pensais utiliser, ssh2_x wink

XaT

Hors ligne

 

#13 2006-08-29 12:26:24

J5
Invité

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Salut; quelqu'un serait comment executer des commandes dans un screen; depuis php ?
Car bien evidement:
<?php
  $output = shell_exec("[command]");
  echo "<pre>$output</pre>";
?>

Me retourne :
Must be connected to a terminal.

Cela pourait m'etre interresant  pour redemmarer un serveur CSS; ( sans passer par un kill )

Merci.

 

#14 2006-09-18 17:47:29

Cmoi20
Invité

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

bon je vais vous aider un peu....

il existe un phprcon qui permet d'envoyer des commandes rcon a un serveur CS (la version 1.6 es legerement différente de la version source)

perso ce que j'ai fait : j'ai pris ces sources pour voir comment cela marchais et je les ai modifiées pour obtenir les fonctions voulues (un restart du serveur lanceant simplement la commant exit et le serveur etant persistant, il se relance tout seul.)

apres j'ai regardé plus en details comment ca marchais...  cela envoir directement sur le port les informations encapsulées comme il faut, j'ai donc repris l'encapsulation (pour CS 1.6 seulement) pour modifier la facon dont cela marchais car CS 1.6 a ete mis a jour et n'accepte plus le script d'origine.

si vous voulez plus d'infos, vous pouvez me contacter par mail car je ne risque pas de passer asses regulierement sur ce forum. (ou poser une question sur notre forum d'association.)

PS : si vous voulez, vous pouvez voir un apercu des infos retireés avec la commande status sur notre site : www.carnalan.com dans la colone en bas a droite.



voici une partie des sources utilisées (bon OK C pas parfait mais a l'origine je suis pas un developpeur):

<?php
function communicate($command, $socket)
{
fputs($socket, $command, strlen($command));
$buffer = fread ($socket, 1);
$status = socket_get_status($socket);
$buffer .= fread($socket, $status["unread_bytes"]);
if(substr($buffer, 0, 4) == "\xfe\xff\xff\xff")
{
$buffer2 = fread ($socket, 1);
$status = socket_get_status($socket);
$buffer2 .= fread($socket, $status["unread_bytes"]);
if(strlen($buffer) > strlen($buffer2))
$buffer = substr($buffer, 14) . substr($buffer2, 9);
else
$buffer = substr($buffer2, 14) . substr($buffer, 9);
}
else
$buffer = substr($buffer, 5);
return $buffer;
}

$server_ip = gethostbyname($_GET[ip]);
$server_port = $_GET[port];
$server_password = $_GET[pass];
$type = $_GET[type];
if($type == "cs")
{

$fp = fsockopen("udp://".$server_ip, $server_port, $errno, $errstr, 5);
//echo $server_ip." : ".$errno." : ".$errstr."<br>";
if($fp)
{ $connected = true; }
else
{ $connected = false; }
$socket = $fp;
if($connected == true)
{
$command = "\xff\xff\xff\xffchallenge rcon\n";
$buffer = communicate($command, $socket);
$buffer = explode(" ", $buffer);
$challenge_number = trim($buffer[2]);
$command = "\xff\xff\xff\xffrcon $challenge_number \"$server_password\" status\n";
$buffer = communicate($command, $socket);
if(trim(substr($buffer,0,18)) == "Bad rcon_password.")
{
echo trim($buffer);
exit;
}
$line = explode("\n", $buffer);
$map = substr($line[3], strpos($line[3], ":") + 1);
$players = trim(substr($line[4], strpos($line[4], ":") + 1));
$active = explode(" ", $players);
$status["ip"] = trim(substr($line[2], strpos($line[2], ":") + 1));
$status["name"] = trim(substr($line[0], strpos($line[0], ":") + 1));
$status["map"] = trim(substr($map, 0, strpos($map, "at:")));
$status["mod"] = "Counterstrike " . trim(substr($line[1], strpos($line[1], ":") + 1));
$status["game"] = "Halflife";
$status["activeplayers"] = $active[0];
$status["maxplayers"] = substr($active[2], 1);
for($i = 1; $i <= $status["activeplayers"]; $i++)
{
$tmp = $line[$i + 6];
if(substr_count($tmp, "#") <= 0)
break;
$begin = strpos($tmp, "\"") + 1;
$end = strrpos($tmp, "\"");
$result[$i]["name"] = substr($tmp, $begin, $end - $begin);
$tmp = trim(substr($tmp, $end + 1));
$end = strpos($tmp, " ");
$result[$i]["id"] = substr($tmp, 0, $end);
$tmp = trim(substr($tmp, $end));
$end = strpos($tmp, " ");
$result[$i]["wonid"] = substr($tmp, 0, $end);
$tmp = trim(substr($tmp, $end));
$end = strpos($tmp, " ");
$result[$i]["frag"] = substr($tmp, 0, $end);
$tmp = trim(substr($tmp, $end));
$end = strpos($tmp, " ");
$result[$i]["time"] = substr($tmp, 0, $end);
$tmp = trim(substr($tmp, $end));
$end = strpos($tmp, " ");
$result[$i]["ping"] = substr($tmp, 0, $end);
$tmp = trim(substr($tmp, $end));
$tmp = trim(substr($tmp, $end));
$result[$i]["address"] = $tmp;
}

}
else
{
echo "erreur de connexion au serveur";
exit;
}

echo "<table border=1 width=\"100%\" bordercolor=\"#2e5a87\" cellSpacing=0 cellPadding=0>
<tr height=\"30\"><td>&nbsp; Hostname :</td><td>&nbsp;".$status["name"]."</td></tr>
<tr height=\"30\"><td>&nbsp; Version :</td><td>&nbsp;".$status["mod"]."</td></tr>
<tr height=\"30\"><td>&nbsp; IP :</td><td>&nbsp;".$status["ip"]."</td></tr>
<tr height=\"30\"><td>&nbsp; Map :</td><td>&nbsp;".$status["map"]."</td></tr>
<tr height=\"30\"><td>&nbsp; Joueurs :</td><td>&nbsp;".$status["activeplayers"]." active / ".$status["maxplayers"]." max</td></tr>
</table>";
if($status["activeplayers"]>0)
{
echo "<table border=1 width=\"100%\" bordercolor=\"#2e5a87\" cellSpacing=0 cellPadding=0>";
for($i = 1; $i <= $status["activeplayers"]; $i++)
{
echo "<tr><td>".$result[$i]["name"]."</td><td>".$result[$i]["id"]."</td><td>".$result[$i]["wonid"]."</td><td>".$result[$i]["frag"]."</td><td>".$result[$i]["time"]."</td><td>".$result[$i]["ping"]."</td><td>".$result[$i]["address"]."</td><td>kick</td><td>ban</td></tr>";
}
echo "</table>";
}
}
elseif($type == "css")
{

define("SERVERDATA_EXECCOMMAND",2);
define("SERVERDATA_AUTH",3);
class RCon {
    var $Password;
    var $Host;
    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("Impossible d'ouvrir le socket: $errstr ($errno)\n");
    $this->_Set_Timeout($this->_Sock,2,500);
    }
   
    function Auth () {
    $PackID = $this->_Write(SERVERDATA_AUTH,$this->Password);
   
    $ret = $this->_PacketRead();
    if ($ret[1]['id'] == -1) {
        die("Erreur\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='') {
    $id = ++$this->_Id;
    $data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);
    $data = pack("V",strlen($data)).$data;
    fwrite($this->_Sock,$data,strlen($data));
    return $id;
    }

    function _PacketRead() {
    $retarray = array();
    while ($size = @fread($this->_Sock,4)) {
        $size = unpack('V1Size',$size);
        if ($size["Size"] > 4096) {
        $packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096);
        } else {
        $packet = fread($this->_Sock,$size["Size"]);
        }
        array_push($retarray,unpack("V1ID/V1Reponse/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(
                    'Reponse' => $pack['Reponse'],
                    '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();
    return $ret[2]['S1'];
    }
}

$IP = $server_ip;
$Port = $server_port;
$Pass = $server_password;
$Rcon = "Status";

$r = new rcon("$IP",$Port,"$Pass");
$r->Auth();
$buffer = $r->rconCommand("$Rcon");
//echo "buffer : ".$buffer."<br>";
if(trim(substr($buffer,0,18)) == "Bad rcon_password.")
{
echo trim($buffer);
exit;
}
$line = explode("\n", $buffer);
$map = substr($line[3], strpos($line[3], ":") + 1);
$players = trim(substr($line[4], strpos($line[4], ":") + 1));
$active = explode(" ", $players);
$status["ip"] = trim(substr($line[2], strpos($line[2], ":") + 1));
$status["name"] = trim(substr($line[0], strpos($line[0], ":") + 1));
$status["map"] = trim(substr($map, 0, strpos($map, "at:")));
$status["mod"] = "Counterstrike " . trim(substr($line[1], strpos($line[1], ":")
+ 1));
$status["game"] = "Halflife";
$status["activeplayers"] = $active[0];
$status["maxplayers"] = substr($active[1], 1);


echo "<table border=1 width=\"100%\" bordercolor=\"#2e5a87\" cellSpacing=0 cellP
adding=0>
<tr height=\"30\"><td>&nbsp; Hostname :</td><td>&nbsp;".$status["name"]."</td></
tr>
<tr height=\"30\"><td>&nbsp; Version :</td><td>&nbsp;".$status["mod"]."</td></tr
>
<tr height=\"30\"><td>&nbsp; IP :</td><td>&nbsp;".$status["ip"]."</td></tr>
<tr height=\"30\"><td>&nbsp; Map :</td><td>&nbsp;".$status["map"]."</td></tr>
<tr height=\"30\"><td>&nbsp; Joueurs :</td><td>&nbsp;".$status["activeplayers"].
" active / ".$status["maxplayers"]." max</td></tr>
</table>";


}


?>

 

#15 2008-05-10 19:41:34

daminou
Membre
Date d'inscription: 2008-05-10
Messages: 10

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

Salouté,

perso je me suis fait un bon ptit script shell et je manie mes serveurs bf2, cod4 et teamspeak tranquilement avec un ptit case :-D

Hors ligne

 

#16 2008-05-11 02:17:19

Papy
Jeidi
Lieu: Val d'Oise
Date d'inscription: 2006-08-19
Messages: 165
Site web

Re: Démarrer, arreter relancer un serveur de jeux via une interface Web

bah le détérage m intéresse lol

daminou c est possible de faire tourner ton script, j y connais rien en code hmm


Vive le zouk, le Ragga et les Mangas

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson