Mittwoch, 7. Juli 2010

Crysis Wars Serverstats Query mit PHP abfragen

Ich habe mich schon vor einem Jahr mal dafür interessiert die Game-Stats von einem Crysis Wars Server ab zu fragen. Dabei habe ich mich gedacht dass ich einfach mit Wireshark den Traffic anschauen müsste und diesen dann in einem PHP-Script selber senden müsste. Da ist mir dann aber aufgefallen dass ich nicht einfach kopieren kann was bein sniffen gesendet wurde. Irgendwie musste meine Anfrage auf die Antwort des Server stimmen, und dann erst würde ich die Gameliste bekommen. Ingame lief dass ja alles wunderbar, nur ich habe nicht rausgefunden was wann wohin gesendet werden muss.

Kurze Zeit später wurde ich Admin auf dem Obositii.ro Server. So hatte ich Zugang zu einem Rcon Server. Dazu gab es leicht Scripte zu finden, bzw. den Traffic mit zu schneiden und dann daraus ein PHP-Script zu basteln mit dem ich mich auf dem Server einloggen konnte und dann die Playerliste abfragen kann. Hier war nur dass Problem, dass ich meine Zugangsdaten verwenden musste. Wenn also jemand mein Script hacken konnte oder irgendwie an meine Zugangsdaten kam, hätte ich ein Problem. Darum habe ich dass gleich gelassen. Eine bessere Idee wäre es aber gewesen eine Klasse zu schreiben die andere Programmierer verwenden könnte um sich mit PHP auf einem Rcon-Server ein zu loggen. So könnte man all die normalen Serverbefehle über einen Webbrowser erreichen und jederzeit etwas ändern. Es sollte sogar fast möglich sein dass man den Chat Ingame abfängt, in eine Datenbank schreibt und dieses dann wieder auf der Website ausgibt.

Gestern habe ich mich aber doch noch mal ran gesetzt um diese einfache Statistik-Abfrage zu bewältigen. Und DA! - ich habe es geschafft. Zwar habe ich es weniger alleine geschafft, aber mit der Hilfe von anderen Scripts konnte ich verstehen wie was wann gesendet werden muss, damit ich letztendlich eine Playerliste und Serverinfo abfragen konnte.

Angefangen hat alles damit, dass ich auf ein PHP-Script namens LGSL (Live Game Server List) gestoßen bin. Insgesamt bietet diese Paket aktuell die Unterstützung für über 90 Spiele. Das ließ mich zu erst stutzig reagieren. Ich hatte dann nämlich als Idee dass dieses Script auf andere Seiten zugreift, wie Gamespy oder Gametracker, und sich von da die Infos holt. Diese sind aber nicht immer so ganz aktuell und es werden auch häufig nicht alle Server gelistet die man haben will. Aber nachdem ich zwei Stunden lang etwas tiefer gegraben habe, konnte ich dann doch rausfinden dass (auf jedenfall Crysis Wars) die einzelnden Gameserver direkt abgefragt werden. Wenn ich also dieses Script kopieren würde könnte ich mein eigenes daraus basteln und dann selber Server abfragen. Aber da mich noch mehr interessiert hat, was zum Beispiel wirklich gesendet wird, habe ich weiter Nachforschugen angestellt.

So wollte ich wissen ob irgendwo eine Dokumentation zum "Crysis Wars Gameserver Protokoll" vorliegt. Aber gefunden habe ich nicht wirklich etwas. Dann ist mir im Script aufgefallen dass dort etwas von wegen Generic Gamespy Protokoll 1 & 2 & 3 steht. Dazu kam dass das Gamespy Protokoll 3 die selbe Protokollnummer (06) bekam wie Crysis und Crysis Wars. Somit dachte ich also ich hätte mein Ziel gefunden, aber dem war leider nicht so. Über Google konnte ich überhaupt nichts dazu finden. Nur das erste und zweite Gamespy Protokoll konnte ich im Internet finden. Diese waren aber beide anders aufgebaut als das welches ich benötigte. Dann habe ich mich mal etwas doofer mit der Google-Suche angestellt und nur nach "Gamespy Protocol" gesucht. Da die ersten Ergebnisse wieder auf LGSL und diese zwei ersten Protokolle gezeigt haben, bin ich etwas weiter in der Liste runter gegangen. Und siehe da, nach ein paar Forenseiten und anderen Shootergames bin ich auf einem UT3 (Unreal Turnament 3) Wiki auf der richtigen Seite gelandet. Hier wird ein Protokoll beschrieben dass gleich dem ist, was ich im LGSL-Script gefunden habe und wo die Pakete genauso aussehen und aufgebaut sind wie das mitgesniffte von Crysis Wars. In der Beschreibung stand etwas dabei von wegen Gamespy Protokoll v4. Dies werde ich dann im nächsten Post genauer beschreiben.

Aber nach einem langen Tag Arbeit habe ich doch letztendlich mein Ziel erreicht und kann jetzt Server succsessfull querien.

1 Kommentar:

  1. Kannst du die PHP Scripte auch veröffentlichen? Oder hab ich jetzt einen Link übersehen mit einem Tutorial?

    AntwortenLöschen