Web Per Link einen Server Command ausführen lassen

Dieses Thema im Forum "Programmierung" wurde erstellt von MC Kolumfer, 9. Februar 2015.

  1. MC Kolumfer
    Offline

    MC Kolumfer

    Registriert seit:
    20. Dezember 2013
    Beiträge:
    2
    Hallo,

    Ich möchte, dass man über einen Link (der später nur einmalig gültig ist) einen Minecraft Command ausführen lassen.

    Hätte jemand da eine Idee für ein Php skript, so dass ich z.B. über webadresse.domain/cmd.php den Command /kickall ausführen lassen kann?

    Vielen Dank im voraus
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Hey, du könntest das Ganze über rcon, oder zB das Plugin 'Websend' machen. Diese sind extra dafür gedacht.
     
    #2
  3. LanToaster
    Offline

    LanToaster

    Registriert seit:
    12. Juli 2011
    Beiträge:
    20
    Rcon hab ich nochnie benutzt. Aber ich kann ebenfalls Websend empfehlen.
    Für sachen die WebSend nicht kann, (gibt es leider einige) benutze ich eine direkte SSH verbindung über PHP und haud as zeug direkt in die Konsole rein.
    (Was allerdings Code benutzt den ich nit ganz versteh)

    Der Part einen Link "Nur einmal Nutzbar" zu machen. Ich weiss nit wie man das "Normal" macht. Aber ich würde das in etwa so machen:
    Beachte bitte: ich habe den Code einfach so zusammengeschrieben und NICHT getestet. D.h. Es können Tipp/Syntax fehler drinne sein.
    Ausserdem gehe ich davon aus das du die dafür benötigte MySQL Datenbank anlegen kannst. :)

    <?
    ### - Erstmal eine Funktion um den Speziellen Link zu erstellen. - ###
    function createlink()
    {
    global = $mySQLopen;
    if ($mySQLopen != true)
    {MySQLLogin();}​
    #### - Ich gehe davon aus das du nen Weg hast zu deiner MySQL datenbank zu verbinden. Ich mache das über diese Funktion - ####

    $token = mt_rand(1000,9999)
    $time = time();
    #### - Ich setze nen Zufallswert für den "Speziellen Einmal Link" und die Aktuelle Uhrzeit, um den Link zeittechnisch verfallen zu lassen können - ####

    $DB_Database = 'minecraft_server';
    $DB_Table = 'One_Time_Links';
    mysql_select_db($DB_Database);
    $DB_Comand = "INSERT INTO $DB_Table (`token` , `time`) VALUES ('$token' , '$time');";
    $DB_Querry = mysql_query($DB_Comand) or die("Anfrage fehlgeschlagen: " . mysql_error());
    #### - Ich setze nen Zufallswert für den "Speziellen Einmal Link" und die Aktuelle Uhrzeit, um den Link zeittechnisch verfallen zu lassen - ####

    $website = "www.test.de/cmd.php?token=";
    echo $website.$token
    #### - Hier Poste ich den Speziellen Link den wir Hergestellt haben. - ####
    }​
    ### - Jetzt eine Funktion um den Speziellen Link auszulesen - ###
    function checklink()
    {
    global = $mySQLopen;
    if ($mySQLopen != true)
    {MySQLLogin();}
    #### - Ich gehe davon aus das du nen Weg hast zu deiner MySQL datenbank zu verbinden. Ich mache das über diese Funktion - ####

    if(isset($_GET['token'])) {$token = $_GET['token'];} else {$token = "none";}
    #### - Wir überprüfen ob wir einen Token im Link haben. Wenn wir keinen haben Setzen wir den wert auf "none" Sonst würden wir fehler erhalten. - ####
    $DB_Database = 'minecraft_server';
    $DB_Table = 'One_Time_Links';
    mysql_select_db($DB_Database);

    $DB_Comand = "SELECT * FROM $DB_Table WHERE `token` LIKE '$token';";
    $DB_querry = mysql_query($DB_Comand) or die("Anfrage fehlgeschlagen: " . mysql_error());
    $DB_Results = mysql_num_rows($DB_querry);
    #### - Wir überprüfen ob wir in der Datenbank einen Token für den Einmal Link haben. (Sprich er sucht inner Datenbank, und speichert in $DEB_Results die anzahl an Datensätzen die er findet. - ####
    #### - Einen Zeitlichen Verfall des Links berücksichtige ich hier nochnicht. - ####

    if ($DB_Results > 0)
    {
    #### - Code für dein Einmal Command kommt hier her. Ich beziehe mich hierbei der einfachheit auf Websend - ####
    $ws = new Websend("MC-SERVER"); # Neue WebSend Instanz herstellen
    $ws->connect("PASSWORT"); # Mit Passwort zum Server Verbinden
    $ws->doCommandAsConsole("Auszführendes Command"); # Command Ausführen
    $ws->disconnect(); # Websend Instanz beenden.

    $DB_Comand = "DELETE FROM $DB_Table WHERE `token` LIKE '$token';";
    $DB_querry = mysql_query($DB_Comand) or die("Anfrage fehlgeschlagen: " . mysql_error());
    #### - Wir Löschen den Token aus der Datenbank damit er kein 2. Mal benutzt werden kann. - ####
    }​
    else
    {
    echo "Dein Link ist nicht Gültig";
    #### - Fehlerausgabe im fall von einem Nicht gefundenen Token. - ####
    }​
    }​
    ?>


    DISCLAIMER:
    Sollte das ein Profi lesen, ich hab das nie gelernt. Ich Code mir das alles bei "Trial and Error" zusammen. Ergo, gibt es mit sicherheit ne Elegantere lösung.
     
    #3
  4. Kaan2106
    Offline

    Kaan2106

    Registriert seit:
    20. November 2013
    Beiträge:
    14
    Sooo, hier ist dein Script wie gewünscht -> Drück mich bitte nicht zu feste ;-)

    Als aller erstes erstellst du dir eine Textdokumentdatei mit den Namen "cmd.txt" (wenn du den Namen änderst, ändere ihn auch in meinem Script ;-), stelle sicher, dass die Datei die Rechte 777 hat.

    Suche im Script nach " PASSWORT " und ändere es nach deinem Belieben (denk an deine server.properties)
    Suche auch nach " 25575 " (direkt über PASSWORT) und ändere es auch nach deinem Belieben

    Ich wünsch dir und andere, die es lesen viel spaß damit ;-)
     
    #4
    MC Kolumfer gefällt das.