teol

Untitled

Mar 7th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. define("PORT", 1311);
  3.  
  4. define("DB_HOST", "XX");
  5. define("DB_USER", "XX");
  6. define("DB_PASS", "XX");
  7. define("DB_NAME", "XX");
  8.  
  9.  
  10. /********************************
  11. * COMMANDE DISPONIBLE POUR LE CLIENT :
  12. * 'CHECK_STEAM_ID%STEAM_X:X:XXXXX'
  13. *      -> CHECK SI LE CLIENT EST BAN. SI OUI, ON RETOURNE "BAN", SINON "NOTBAN"
  14. * 'ADD_TO_BANLIST%STEAM_X:X:XXXXX%IP.IP.IP.IP'
  15. *       -> AJOUTE UN MEC EN BAN LISTE, RETOURNE DANS TOUS LES CAS "OK"
  16. ***********************************/
  17.  
  18. $socket = stream_socket_server("udp://0.0.0.0:".PORT, $errno, $errstr, STREAM_SERVER_BIND);
  19. if (!$socket) {
  20.     die("$errstr ($errno)");
  21. }
  22.  
  23. logMessage("Démarrage du script");
  24. _printtoscreen("Starting...");
  25. do {
  26.     $pkt = stream_socket_recvfrom($socket, 1024, 0, $peer);
  27.     $pkt = trim($pkt);
  28.     _printtoscreen("Reçu de $peer : $pkt");
  29.  
  30.     if(strpos($pkt, "CHECK_STEAM_ID%") !== FALSE)
  31.     {
  32.         $steam_id = substr($pkt,strlen("CHECK_STEAM_ID%"));
  33.         _printtoscreen("Recherche du Steam ID dans la base : ". $steam_id);
  34.         $ISBAN = IsSteamIDBan($steam_id);
  35.                
  36.         if($ISBAN === TRUE)
  37.         {
  38.             _printtoscreen("Steam ID ".$steam_id." present dans la banlist");
  39.             logMessage("Steam ID ".$steam_id." present dans la banlist");
  40.             stream_socket_sendto($socket, "".$steam_id." BAN", 0, $peer); //Changement, renvoie $STEAMID BAN
  41.         }
  42.         else
  43.         {
  44.             _printtoscreen("Steam ID ".$steam_id." non present dans la banlist");
  45.             stream_socket_sendto($socket, "".$steam_id." NOTBAN", 0, $peer); //Changement, renvoie $STEAMID NOTBAN
  46.         }
  47.     }
  48.     elseif(strpos($pkt,"ADD_TO_BANLIST%") !== FALSE)
  49.     {
  50.         $content = substr($pkt,strlen("ADD_TO_BANLIST%"));
  51.         $parts = explode('%',$content);
  52.         $steam_id = $parts[0];
  53.         $ip = $parts[1];
  54.        
  55.         _printtoscreen("Ajout du Steam ID ".$steam_id." lié à l'IP ".$ip);
  56.         logMessage("Ajout du Steam ID ".$steam_id." lié à l'IP ".$ip);
  57.  
  58.         AddToBanList($steam_id, $ip);
  59.        
  60.         stream_socket_sendto($socket, "OK", 0, $peer);
  61.     }
  62.     else
  63.     {
  64.         _printtoscreen("Commande inconnnue");
  65.     }
  66.  
  67.  
  68.    
  69. } while ($pkt !== false);
  70.  
  71.  
  72.  
  73.  
  74. function IsSteamIDBan($steam_ID)
  75. {
  76.     try{
  77.         $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  78.         $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
  79.        
  80.         $requete = $pdo->prepare('SELECT COUNT(*) AS Nombre FROM banlist WHERE steamid = :steamid');
  81.         $requete->bindValue(':steamid', $steam_ID);
  82.         $requete->execute();
  83.        
  84.         $donnees = $requete->fetch();
  85.         $nombre = $donnees['Nombre'];
  86.        
  87.         $requete->closeCursor();
  88.        
  89.         if($nombre < 1){
  90.             return false;
  91.         }
  92.         else{
  93.             return true;
  94.         }
  95.     }
  96.     catch(Exception $e){
  97.         $message = $e->getMessage();
  98.         _printtoscreen($message);
  99.         return false;
  100.     }
  101. }
  102.  
  103. function AddToBanList($steam_id,$ip)
  104. {
  105.     try{
  106.         $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  107.         $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
  108.        
  109.         $requete = $pdo->prepare('INSERT INTO banlist SET
  110.                                 steamid = :steamid,
  111.                                 ip = :ip');
  112.         $requete->bindValue(':steamid', $steam_id);
  113.         $requete->bindValue(':ip', $ip);
  114.         $requete->execute();
  115.     }
  116.     catch(Exception $e){
  117.         $errorcode = $e->getCode();
  118.         if($errorcode != 23000){ // 23000 = doublon SQL. On ne va pas logguer betement les erreurs de doublon pour economiser du cpu
  119.             $message = $e->getMessage();
  120.             _printtoscreen($message);
  121.             logMessage($message);
  122.         }
  123.     }
  124. }
  125.  
  126. function _printtoscreen($message)
  127. {
  128.     echo date("Y-m-d H:i:s"),"\t",$message,"\n";
  129. }
  130.  
  131. function logMessage($message){
  132.     $handle = fopen("/home/teol/banlist/logs/logs.txt", "a+");
  133.     $date = date("Y-m-d H:i:s");
  134.     fwrite($handle, "$date - $message\r\n");
  135.     fwrite($handle, "===============\r\n");
  136.     fclose($handle);
  137. }
Advertisement
Add Comment
Please, Sign In to add comment