Administration de serveurs urban terror a distance

Description

Voila une source qui comme son nom l'indique envoie un packet udp vers un serveur UrT, pour envoyer une commande rcon et/ou demander le statut du serveur et afficher la réponse du serveur.
J'ai trouver ca tres utile car je joue moi-meme pas mal a ce jeu et que on en parle pas sur codes-sources.

Voila comment il marche:
-Il demande les informations sur le serveur(ip,port,)
-en cas d'envoi de rcon il demande le passe et la commande à envoyer
-Il ouvre un socket UDP sur le serveur
-Il envoie un paquet vers le serveur contenant: ÿÿÿÿgetinfo xxx ou ÿÿÿÿrcon rconpasswd cmde. Les 4 ÿ peuvent etre remplacer par chr(255) ou /xFF, information tres utile pour les passants.
-Il affiche le retour buffer su socket (0_o?la reponse du serveur quoi!)

Source / Exemple :

//contenu du fichier index.php
//il depend des deux autres sources du zip
//ce n'est que l'interface
<?
//////////////////////////////////////////////////////////////////////
/************************Version 1.00*******************************//
///////Ce script permet la gestion de serveurs Urban Terror.//////////
///////Ce type de source se fait rare de nos jour sur le net//////////
//*************************By XRaph*********************************//
//////////////////////////////////////////////////////////////////////
?>
<html>
<head><title>Script php pour serveurs urt</title></head>
<body bgcolor='696969' text='black'>
<?php
require('q3rcon.php');                                             //Ce script est seulement l'interface
require('q3status.php');                                           //il a besoin de ces deux classes qui sont le 'noyau' de la sources
if (isset($_POST['ip']) AND $_POST['ip']==''){                     //On teste l varible 'ip' pour eviter les erreur de php
     echo "<FONT color='red'><b>Veuillez entrer une adresse ip correcte:</b></FONT>";
	}  
elseif (isset($_POST['ip']) AND $_POST['ip'] != 0) {               //si elle est ok...
     $ip = $_POST['ip']; 
     if ($ip == 'localhost'){$ip='127.0.0.1';}
     if (isset($_POST['port']) AND $_POST['port'] == 0){           //...on teste le port
	     $port = '27960';}                                         //par default '27960'...
     else {
	     $port = $_POST['port'];}	                               //sinon ce que l'utilisateur a mis
		 
     $action = $_POST['action'];                                   //la variable 'action' existe forcement si 'ip' existe 
     switch($action){
	     case 'statut':                                            //pour obtenir le statut seulement
	         $s = new q3status($ip, $port);                        //on envoie les informatios ip:port a la classe qui fait le boulo
		     $result = $s->update_status();                        //on demande les resulta
              echo "<textarea cols=120 rows=30 readonly='readonly' style='color: lime; background-color: black'>";  //ouvertur du textarea en readonly  
    		    if (!$result) {
			     echo "Il y a eu un probleme pour obtenir le statut du serveur (mauvaise combinnaison ip:port ?).";  //si le resultat est empty 
		        }
				else {                                                             //sinon on traite et affiche le resultat
				echo "Nom du serveur: " . strip_colors($s->cvarlist['sv_hostname']) . "\n";
	    	     echo "Joueurs: " . $s->get_num_players() . "/" . $s->cvarlist['sv_maxclients'] . "\n";
		             foreach ($s->playerlist as $playernumber => $playerinfo) {
		                 echo "Numero du joueur: " . $playernumber . "\n";
		                 echo "Nom du joueur(sans couleurs): " . $playerinfo['strippedname'] . "\n";
		                 echo "Score du joueur: " . $playerinfo['score'] . "\n";
		                 echo "Ping du joueur: " . $playerinfo['ping'] . "\n";
		                 echo "\n";
		            }
			         foreach ($s->cvarlist as $cvarname => $cvarvalue) {
		                 echo $cvarname . " = " . $cvarvalue . "\n";
		                }
		         echo "</textarea>";
				}		 
		     break;
         case 'rcon':                                              //pour envoyer une commande rcon
	         if (isset($_POST['pass'])){                           //on teste le pass
		         $pass = $_POST['pass']; }
             else { $pass = '';}
		     if (isset($_POST['cmd'])){                            //la commande...
		         $cmd = $_POST['cmd'];}
             else { $cmd = 'cvarslist';}                           //qui sera 'cvarlist' par defaut
            
		     $r = new q3rcon($ip, $port, $pass, '30');	           //envoie les donnée a la classe qui fait le boulo...
             $r->send_command($cmd); 
             echo "<textarea cols=120 rows=30 readonly='readonly' style='color: lime; background-color: black'>";   //...textarea...
		     $reponse=$r->get_response();
             if(!$reponse){                                        //...probleme...
                 echo"Il y a eu un probleme pour obtenir la reponse du serveur (mauvaise combinnaison ip:port ?)";
                }
             else{                                                 //...ou pas...
                 echo $reponse;
                				 
				echo '
';
             sleep(1); 
		     $r->send_command("status"); 
		     echo $r->get_response();
			 }
			 break;
		 
				    
				
			
		}                    //que c'est jolie toutes ces fermeture de blocs...dans une autre version yen avait plus...
	}	                    
	
?>
		    </textarea>	
			 
<script type='text/javascript'>
function grise(radio)
{if(radio[0].checked){document.info.pass.disabled=true; document.info.cmd.disabled=true; document.info.envoie.disabled=false;}                    
if(radio[1].checked){document.info.pass.disabled=false; document.info.cmd.disabled=false; document.info.envoie.disabled=false;}
}
//un peu de JS pour le frmulire ca fait pas de mal
</script> 
 
		                        <!--...et THE formulaire...-->
 <form name='info' action='<?php echo $_SERVER['PHP_SELF'] ?>' method=POST>              

                <p>
                <pre>
<b>Ip:          </b><input type='text' name='ip' value="<?php if(isset($ip)){echo $ip;}?>"></br>
<b>Port:        </b><input type='text' name='port' value="<?php if(isset($port)){echo $port;}?>" /><kbd>Vous pouvez ne pas entrer de port, le port sera alors 27960.</kbd></br>
<b>Seulement recuperer le statut:</b><input type='radio' name='action' value='statut' onclick='grise(info.action)' <?php if(isset($_POST['action']) && $_POST['action'] == 'statut'){ echo "checked=true";}?>/> 
<b>Envoyer une cmde rcon:        </b><input type='radio' name='action' value='rcon' onclick='grise(info.action)' <?php if(isset($_POST['action']) && $_POST['action'] == 'rcon'){ echo "checked=true";}?>/></br>
<b>Rcon passwd: </b><input type='password' name='pass' value="<?php if(isset($pass)){echo $pass;}?>" <?php if(isset($_POST['action']) && $_POST['action'] != 'rcon'){echo "disabled='true'";}else{}?>/></br>
<b>Commande :   </b><input type='text' name='cmd' value="<?php if(isset($cmd)){echo $cmd;}?>" <?php if(isset($_POST['action']) && $_POST['action'] != 'rcon'){echo "disabled='true'";}else{}?>/> <kbd>Vous pouvez ne pas entrer de commande, cela enverra la commande status.</kbd></br></pre> 
                <input type='submit' value='envoyer' name='envoie'  <?php if(!isset($_POST['envoie'])){echo "disabled='true'";}?> />
                </p>
		
</body></html>

Conclusion :

Il y a un ti peu de JS pour la mise en forme du formulaire.

Je tient a preciser qe la source q3statut.php n'est pas de moi et que q3rcon.php non plus a part quelques changements dans ce derniers.

C'est ma première source php.
Je la met a jour des que possible pour les commentaires .

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.