Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Rcon an Hl2-Server (https://www.delphipraxis.net/103142-rcon-hl2-server.html)

rey003 11. Nov 2007 08:14


Rcon an Hl2-Server
 
Hallo DPler,
ich hab mal wieder ein Problem. Dieses mal geht es um Counterstrike Source.
Eigentlich wollte ich ganz einfach mit HLSW einem Rcon an den Server zu schicken. Dies geht jedoch nicht da mein Router nicht unterstützt wird.
Also dachte ich mir dann versuch ich selber ein einfaches Programm zu schreiben.
Mit diesem Code konnte ich auch schon die groben Serverdaten abfragen.
Delphi-Quellcode:
begin
  IdUDPClient1.Active:= True;
  ActiveSleep(5);
  IdUDPClient1.Send(char(255)+char(255)+char(255)+char(255)+'TSource Engine Query'+Chr(0));
  ActiveSleep (10);
  temp:=IdUDPClient1.ReceiveString(120000); //Var. temp ist gefüllt
  IdUDPClient1.Active:= False;
  memo1.Text:= temp;
end;
Aber ich kann die Challangenumber für Rcons nicht holen.
Delphi-Quellcode:
begin
  IdUDPClient1.Active:= True;
  ActiveSleep(5);
  // get rcon challagenumber
  IdUDPClient1.Send(char(255)+char(255)+char(255)+char(255)+'challenge rcon'#10);
  ActiveSleep (10);
  temp:=IdUDPClient1.ReceiveString(120000); //Var. temp ist leer
  IdUDPClient1.Active:= False;
end;
Dh hier empfängt er einfach keinen String. Obwohl es so gehen müsste.
Die Nummer brauch ich aber um später einen Rcon zu schicken.
Das Prinzip hab ich von hier:
http://www.delphipraxis.net/internal...ct.php?t=54541

Ich habe auch im Internet gelesen und alle machen es genau so nur ich empfange nichts
Habt ihr eine Ahnung was falsch sein könnte?

dominikkv 11. Nov 2007 10:10

Re: Rcon an Hl2-Server
 
warum beendest du den oberen Befehl mit Chr(0) und den unteren mit #10?
wenns oben geht, dann vllt unten auch^^.

und vllt haben die bei css gegenüber cs etwas beim rcon geändet?
Such mal im Internet nach geeigneter Dokumentation.

rey003 11. Nov 2007 10:54

Re: Rcon an Hl2-Server
 
naja ich hab das auch schon getestet -> ändert nix
ich find ja eben keine dokumentation wie man nun wirklich einen rcon sendet.
ich habe nur beispiele in php:
http://www.rootforum.de/forum/viewto...highlight=rcon
und da geht es ja auch oder irre ich mich und das unterscheidet sich doch? :gruebel:

Edit: oder is mein code oben nur für 1.6 server? :gruebel:

rey003 11. Nov 2007 11:08

Re: Rcon an Hl2-Server
 
ok das scheint wirklich nur bei 1.6 so zu sein. nur das untere php script versteh ich noch nicht wirklich -.-

rey003 11. Nov 2007 11:23

Re: Rcon an Hl2-Server
 
Code:
    function _Write($cmd, $s1='', $s2='') { 
    // Get and increment the packet id
    $id = ++$this->_Id;

    // Put our packet together
    $data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);
   echo $data;
    // Prefix the packet size
    $data = pack("V",strlen($data)).$data;
   echo "
".$data;
    // Send packet
    fwrite($this->_Sock,$data,strlen($data));

    // In case we want it later we'll return the packet id
    return $id;
    }
Was passiert hier genau? besonders das pack versteh ich nicht.

Edit: die echos sind von mir^^

mkinzler 11. Nov 2007 11:29

Re: Rcon an Hl2-Server
 
pack packt mehrer Elemente in einen Binärstring.
Der erste Parameter gibt das Format an.

rey003 11. Nov 2007 11:39

Re: Rcon an Hl2-Server
 
joar... aber wie sieht das gegenstück für delphi aus?

mkinzler 11. Nov 2007 11:44

Re: Rcon an Hl2-Server
 
Die Elemente werden Stellenweise in Bytes gepackt.

rey003 11. Nov 2007 12:04

Re: Rcon an Hl2-Server
 
wie meinst du das denn?
Ich hab echt lange nix mehr mit Delphi gemacht sondern nur noch php. Aber eben leichtere Sachen.
Kannst du ein kleines Beispiel machen, damit ich verstehe wie du das meinst?
Wäre dir echt dankbar... :wink:

rey003 11. Nov 2007 17:02

Re: Rcon an Hl2-Server
 
Ach man ich weiß echt nich was ich falsch mache... -.-
Hier hab ich folgendes gefunden (Beschreibt den Aufbau der Daten die gesendet werden müssen):
http://developer.valvesoftware.com/w...otocol#Sending
Mein aktueller Code ist dieser:
Delphi-Quellcode:
var
  reqid :integer =0;

const
  SERVERDATA_EXECCOMMAND = 2;
  SERVERDATA_AUTH = 3;

function ContructPacket(id, cmdtype: integer; s1,s2:string) : string;
var
  data: TStringStream;
  packetlength: integer;
  ende: byte;
begin
 //leeres byte
  ende:= 0;
 //ContructPacket
  data := TStringStream.Create('');
  try
   //Länge festlegen
    data.Size:= 4+4+4+length(s1)+1+length(s2)+1;
   //Paketlänge errechnen (-4 da Paketlänge nicht mitgerechnet wird)
    packetlength:= data.Size-4;

    data.Position:= 0;

    data.Write(packetlength,sizeof(INTEGER));
    data.Write(id,sizeof(INTEGER));
    data.Write(cmdtype,sizeof(INTEGER));
    data.WriteString(s1);
    data.Write(ende,sizeof(byte));
    data.WriteString(s2);
    data.Write(ende,sizeof(byte));
    result:= data.DataString;
    reqid:= reqid+1;
 finally
   data.Free;
 end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
 temp: string;
begin
  //IP und Port sind fest in der Komponente eingetragen
  IdUDPClient1.Active:= True;
  IdUDPClient1.Connect;
  ActiveSleep(5); //nur sleep mit application.ProcessMessages;
  IdUDPClient1.Send(ContructPacket(reqid,SERVERDATA_AUTH,'RconPasswort',''));
  ActiveSleep(10);
  temp:= IdUDPClient1.ReceiveString(12000);
  memo1.Text:= temp; //Bleibt leer
  IdUDPClient1.Active:= false;
end;
Laut Sniffer sendet er genau die selbe Zeichenfolge wie die Console in CSS nur der beim ReqID weiß ich immer noch nicht was der bewirkt, deshalb zähl ich ihn einfach hoch..

Ich würd mich wirklich freuen wenn jemand von euch mal drüber schauen könnte!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz