Szerző Téma: [RELEASE] Admin reload (web)  (Megtekintve 4912 alkalommal)

Nem elérhető ATAG

  • Administrator
  • Sage
  • *
  • Thank You
  • -Given: 43
  • -Receive: 239
  • Hozzászólások: 2 650
  • Segített: 1729
  • Dr.
    • Metin2 Hungarian Forum
[RELEASE] Admin reload (web)
« Dátum: 2011-10-20, 05:58:56 »
Ismert probléma a régi (rev.404) root szervereken, hogy dinamikus IP-vel elég macerás GM joghoz jutni.
Nincs más dolgunk mint felrakni egy weboldalra és belépés előtt rányomni az "Add my IP!" gombra...
Mivel csak 2 gombot tartalmaz, elég egyszerűen integrálható bármilyen weboldalba :)

Idézet
<?php
/*

Metin2 admin-reload by ATAG

*/
//-------CONFIGURATION--------
$IP="123.456.123.456"; //server IP, it _MUST_ be adminpage_ip1 in CONFIG!
$Port=13000; //server port
$api_pass="SHOWMETHEMONEY";

$db_addr="localhost";
$db_user="mt2";
$db_pass="mt2!@#";
//-----END CONFIGURATION------

function getRealIP()
{
   if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
   {
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
   }
   else
   {
    $ip=$_SERVER['REMOTE_ADDR'];
   }
   return $ip;
}

function doRefresh()
{
global $IP, $Port, $api_pass;
//Metin2 Bash-Panel by .Infinity
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect ($socket, $IP, $Port);
$query = "\x40".$api_pass."\x0A\x40RELOAD A\x0A";
$query_size = strlen($query);
$write_res = socket_write($socket, $query, $query_size);
$recv_res = socket_recv($socket, $output, 5056, 0);
if ($recv_res==31) { //i'm not sure about this :-/
   return "<br/><b>Frissítés sikeres, most már beléphetsz a játékba.</b>"; //success, you can log into the game now
} else {
   return "<br/><b>Hiba a frissítés során! Manuálisan kell elvégezni, sorry :(</b>"; //Error during the update! Do it manually, sorry
}
socket_close($socket);   
}
?>
<html>
   <head>
      <title>Admin reload</title>
   </head>
   <body>
<?php
if ($_POST['refresh']) {
   $con= mysql_connect($db_addr,$db_user,$db_pass) || die(mysql_error());
   $query="SELECT COUNT(*) FROM common.gmhost WHERE mIP='".getRealIP()."'";
   $result=mysql_query($query);

   $count=mysql_result($result,0);
   mysql_free_result($result);

   if ($count==0) {
      $query="INSERT INTO common.gmhost SET mIP='".getRealIP()."'";
      $res=mysql_query($query) || die(mysql_error());
      if ($res) {
        echo "IP-d (".getRealIP().") felvéve a listába, frissítés...<br/>"; //your ip was successfully added to the list
       
        echo doRefresh();
       
      } else {
        echo "Nem tudtam hozzáadni a listához, sorry :("; //i culdn't add your IP to the list, sorry
      }
   } else {
      echo "Már benne van az ip-d a listában (".getRealIP().")<br/>"; //you IP already in the list
   }

   mysql_close();
} elseif ($_POST['reload']) {
   echo doRefresh();
} else {
?>
   <center>
      <form method="POST">
        <div id="input">
        <br />
        <br />
        <input type="submit" name="refresh" value="Add my IP!"/>
        <br />
        <br />
        <br />
        </div>
        <input type="submit" name="reload" value="Reload only!"/>
        <br />
        <br />
        </b>
      </form>
   </center>
   </div><?php } ?>
   </body>
</html>

Az adatokat értelemszerűen meg kell adni. Ha jól állítjuk be a CONFIG-ban is, akkor API tool ellen is védve marad a szerver + működni is fog :)

« Utoljára szerkesztve: 2012-06-10, 16:50:24 írta ATAG »

Nem elérhető Pyksa

  • Trainee
  • *
  • Thank You
  • -Given: 12
  • -Receive: 17
  • Hozzászólások: 100
  • Segített: 107
  • :)
    • PyksaSoft®
Re:[RELEASE] Admin reload (web)
« Válasz #1 Dátum: 2011-10-20, 16:15:41 »
Egy egyszerűbb változat, én ezt használom már egy jó ideje.

<?php
    $LogData_IP 
$_SERVER['REMOTE_ADDR'];
    
$link $_SERVER['HTTP_REFERER'];

    
$LogData fopen("log/reload_log.txt""a");
    
fwrite($LogData"Adatbázis újratöltve a(z) $LogData_IP IP címről.");
    
fwrite($LogData"\n");
    
fclose($LogData);
    
$socket socket_create (AF_INETSOCK_STREAMSOL_TCP);
    
$result socket_connect ($socket'192.168.1.1''13001');
    
    
$query "\x40SHOWMETHEMONEY\x0A";
    
$query .= "\x40RELOAD A\x0A";
 
    
$query_size strlen($query);
    
$write_res socket_write($socket$query$query_size);
    
$recv_res socket_recv($socket$output50560);
    echo 
"<br />";
    echo 
"<br />";
    echo 
"<b><center>A 'reload a' parancs sikeresen végrehajtva!<br><br>
    Visszairányítalak a főmenübe 5 másodbercen belül.<br>Ha nem, kérlek kattints <a href=" 
$link ">ide!</a>
    <meta http-equiv=\"refresh\" content=\"5;url=" 
$link "\">
    </center></b>"
;
    
socket_close($socket);
?>

Inkább vagyok álmodozó optimista, mint magabiztos pesszimista.