Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Mit php auf Battlefield 1942 über remote anmelden und Befehl ausführen.

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.06.2004
    Beiträge
    10

    Question Mit php auf Battlefield 1942 über remote anmelden und Befehl ausführen.

    Hallo Leute war schon lange nicht mehr hier , aber ich hab mal nen Problem .
    Und zwar folgendes : Ich möchte gerne in mein Webinterface eine BF1942 remoteconsole integrieren. Mit BF2 "md5" hab ich es bereits geschafft , Zunächst möchte ich erst mal nur mich auf dem Server anmelden und einen Befehl ausführen , im Falle meines PHPScripts "admin.runNextLevel" , soll also den Server die nächste Map starten und mir Antwort geben! BF1942 nutzt aber soweit ich verstanden habe xor Verschlüsslung zum login!

    Nun habe ich das hier gefunden . Und habe mir damit mal folgendes PHPScript zusammengebaut :
    PHP-Code:
    <?php
    //IP & Remote Port
    $bf1942server "192.168.10.1";
    $bf1942serverport3 "4712";

    // Remote Logindaten
    $bf1942rconuser "admin";
    $bf1942rconpass "****";

    // Commando ausführen
    $command ="admin.runNextLevel";
    // ///////////////////////////////////////////////////


    function _xorcrypt($string$key) {
     
            for(
    $i=0$i<strlen($string); $i++)    {
                
    $string[$i] = $string[$i]^$key[$i];
            }
        
            return 
    $string;
        }
        
    if (isset(
    $bf1942server) && isset($bf1942serverport3) && isset($bf1942rconpass) && isset($bf1942rconuser) && isset($command)) {

    if(!
    $fp fsockopen($bf1942server$bf1942serverport3$errno$errstr5))
        {
            echo 
    "Kann nicht zum Server verbinden! (" $errstr ")";
        }
       else
        {
    echo 
    "Mit Serversocket verbunden...<br>";
    // Benutzername & Password xor verschlüsseln
            
    $key fread($fp10);
            
    $username _xorcrypt($bf1942rconuser$key) . "\x00";
            
    $password _xorcrypt($bf1942rconpass$key) . "\x00";
        
    // schreibe Benutzername verschlüsellt in den socket
        
    fwrite($fppack("L",strlen($username)));
        
    fwrite($fp$username);
        
    // schreibe Password verschlüsselt in den socket
        
    fwrite($fppack("L",strlen($password)));
        
    fwrite($fp$password);
    // Antwort auf login in $return_data schreiben
            
    $return_data fread($fp,1);
        
    // Sende REMOTE-Commando an den socket
            
    $cmd "admin.execremotecommand \"$command\"\n";
            
    fwrite($fp$cmd chr(0));
    // Antwort auf login in $return_data_command schreiben
            
    $return_data_command fread($fp,128);
        
    // Verbindung schliessen
        
    if(fclose ($fp))    {
    echo 
    "Verbindung wieder geschlossen!";
    }
        
    // Ausgaben anzeigen
    echo "<br><br>$return_data_command<br><br>";
    echo 
    "<br>$return_data";
        }
    }
    ?>
    Aber leider wird nicht wie erwüscht die nächste Map gestartet sodern der Server geht down ohne Meldung. In der Console erscheint dann "> Aborted"

    und der Browser gibt mir :
    Code:
    Mit Serversocket verbunden...
    Verbindung wieder geschlossen!
    
    
    Er scheint ja schon mal eingeloggt zu sein... , den wenn ich das mit einem falschen pw versuche bleibt er online.

    Hat jemand ne Ahnung was falsch ist ?!

    gruss Oli
    Geändert von zyrusthc (25-01-2006 um 02:21 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Interessantes Projekt.

    Hast dus mal ohne das Kommando-Absetzen versucht? Ob der Server dann online bleibt?

    Ich könnte mir eventuell einen falschen Zeichensatz liegen.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    27.06.2004
    Beiträge
    10
    Hallo

    Was meinst du den mit Kommando-Absetzen ?
    Wenn ich
    PHP-Code:
    $cmd "admin.execremotecommand \"$command\"\n";
    fwrite($fp$cmd chr(0)); 
    auskomentiere dann lädt die Seite ohne damit aufzuhören. Normalerweise sollte doch wenigstens der login ausgeführt werden und die Verbindung wieder geschlossen werden. hmmm

    Hat jemand noch ne Idee ?

    gruss Oli

  4. #4
    Registrierter Benutzer
    Registriert seit
    27.06.2004
    Beiträge
    10
    Problem ist gelöst
    Hier mal für andere User :
    PHP-Code:
    <?php
    // ----------------------------------------------------------- //
    // Send rconcommand on BF1942 Server    
    // 25.01.2006  
    // Zyrusthc : zyrusthc.homeip.net      
    // ----------------------------------------------------------- 
    // Thanks to : 
    // http://www.dontcamp.com/code/?file=bf1942_rcon_class.php
    // http://www.bf1942.lightcubed.com/forum/viewtopic.php?p=11941
    // ----------------------------------------------------------- //
    $bf1942server "192.168.10.1";
    $bf1942serverport3 "4712";
    $bf1942rconuser "admin";
    $bf1942rconpass "****";
    $remotecommand "game.listmaps";
    // ----------------------------------------------------------- //

       
        
    function _xorcrypt($string$key) {
        for(
    $i=0$i<strlen($string); $i++)    {
            
    $string[$i] = $string[$i]^$key[$i];
            }
            return 
    $string;
        } 

        function 
    xbyte_to_int($stri_conv) {
            
    $val_finale 0;
            
    $len_stri strlen($stri_conv);
        for (
    $x 0$x $len_stri$x++) {
            
    $val_finale $val_finale + (ord(substr($stri_conv$x1)) * pow(256$x));
            }
        return 
    $val_finale;
        }
        

        function 
    int_to_4byte($numero_conv) {
            
    $final_stri "";
        for (
    $x 1$x <= 3$x++) {
            
    $n_val intval(floor($numero_conv/256));
            
    $n_rest intval($numero_conv 256);
            
    $final_stri .= chr($n_rest);
            
    $numero_conv $n_val;
            }
            
    $final_stri .= chr($n_val);
        return 
    $final_stri;
        }  

        
    $command ="$remotecommand\n";
            
    if(!
    $fp fsockopen($bf1942server$bf1942serverport3$errno$errstr5))
        {
            echo 
    "Kann nicht zum Server verbinden! (" $errstr ")";
        }
       else
        {
            
    $key fread($fp10);
            
    $username _xorcrypt($bf1942rconuser$key) . "\x00";
            
    $password _xorcrypt($bf1942rconpass$key) . "\x00";
        
    fwrite($fppack("L",strlen($username)));
        
    fwrite($fp$username);
        
    fwrite($fppack("L",strlen($password)));
        
    fwrite($fp$password);
            
    $result fread($fp,1);
        
    $response xbyte_to_int($result);

    if (
    $response == 1)
       
    $acstatus "OK";
    else
       
    $acstatus "ERR";

    if (
    $acstatus== "OK") {
        
    $comm_tmp int_to_4byte(2);
       
    fwrite($fp$comm_tmp);
        
    $comm_tmp "ConsoleMessage 0";
        
    $len strlen($comm_tmp) + 1;
       
    fwrite($fpint_to_4byte($len));
       
    fwrite($fp$comm_tmp chr(0));
        
    $len strlen($command) + 1;
       
    fwrite($fpint_to_4byte($len));
       
    fwrite($fp$command chr(0));
        
    $result fread($fp,4);
        
    $response xbyte_to_int($result);
    if (
    $response == 1) {
        
    $result fread($fp,4);
        
    $len xbyte_to_int($result);
        
    $response_len $len;
    if (
    $len 1) {
        
    $result fread($fp,$len);
        }
    else 
    $result "N/A";
        
    $final_result $result;
        }
    }
    else {
        
    $response_len "N/A";
        
    $final_result "N/A";
    }

    $return = array('authentication'    => $acstatus,
            
    'response_len'  => $response_len,
            
    'response'      => $final_result);

            
    $login $return['authentication'];
            
    $antwortlaenge $return['response_len'];
            
    $antwort nl2br($return['response']);
        
    fclose ($fp);
    }

    echo 
    "Login: $login<br>";
    echo 
    "Antwortlaenge: $antwortlaenge<br>";
    echo 
    "Antwort: $antwort";
    ?>
    gruss Oli

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •