Game Server Status

Funktioniert fsockopen() denn auch ohne die Bedingung?

Gibt es evtl. Fehlermeldungen? Wenn nicht: hast Du sie vlt. unterdrückt? (display_errors / error_reporting)
 
display_Errors und error reporting sind beide angeschaltet.

Ohne die Bedingung funktionierts auch nicht.

Fehlermeldungen gibt es keine, auch nicht wenn ich @ entferne.

//Edit: Speichern sollte man vor dem Upload auch:P


Warning: fsockopen() [function.fsockopen]: unable to connect to 216.180.242.218:44453 (Connection refused),

//Edit2: Ich habs jetzt hingekriegt:

Der Gameserver ist nur über UPD erreichbar, umgestellt und funktioniert wie geschmiert.
 
Zuletzt bearbeitet:
Tja funktioniert leider doch nicht so geschmiert wie ich dachte.

Egal ob der Gameserver läuft oder nicht, die Domain ist trotzdem erreichbar und mit

PHP:
<?php
if (!@$fp = fsockopen("IP",Port, $errno, $errstr, 1)){
   echo "Offline";
} else {
   echo "Online";
}
?>

testet man ja, ob eine Verbindung zu der IP und dem Port möglich ist.

Wenn der Server läuft und mit dem Netz verbunden ist, ist eine Verbindung möglich und dadurch steht er immer auf online.

Kennt wer von euch eine Möglichkeit, um den richtigen Online Status herauszufinden?
 
Der Port wäre der Schlüssel. Wenn der Game-Server nur auf einem bestimmten Port läuft, dürfte - wenn der Game-Server nicht läuft - bei diesem Port nichts erreichbar sein. Wenn doch, dann müsstest Du eher auf einen Datenaustausch mit dem Game-Server auf diesem Port prüfen. Wie das geht hängt jedoch von dem Spiel ab was Du dort hast.
 
Tja das habe ich auch getestet:

Port 44453 ist der Loginserver, Port 44463 ist der Gameserver. Ich habe auf beides geprüft, der Server ist definitiv offline aber ich krieg trotzdem ein Online.

Wie prüfe ich mit PHP bitte auf Datenaustausch mit dem Gameserver?
 
Zuletzt bearbeitet:
Mit fsockopen() öffnest Du nur einen Kanal zu einem Server auf einem bestimmten Port. Auf diesem Weg musst Du dann dem Server Daten schicken die dieser verarbeiten soll und kann. Beispiele dafür findest Du im Manual für fsockopen() (example #1). Natürlich kannst Du nicht einfach irgendwas schicken. Du musst schon wissen was der Game-Server dort als Request erwartet damit er wenn er online ist auch antwortet. Wenn Du das nicht weißt, frag den Hersteller.
 
...ergänzend dazu:
Wenn der Hersteller, wie im Anfangspost angedeutet, dir keine Infos gibt,
ist das Herausfinden des Protokolles der schwierigste Teil am Programm.

Sniffe den Netzwerkverkehr und untersuch die Daten, die bei bestimmten Aktionen
im offiziellen Gameclient ausgetauscht werden. Such das Schema im Ganzen.

Wenn der off. Gameclient zB. in C# oder Java geschrieben ist,
könnte man (falls es bei in deinem Wohnort- bzw. Land für den Fall legal ist)
den Client dekompilieren und den Code untersuchen...

Solche Methoden garantieren zwar nicht, dass du nicht irgendwelche Möglichkeiten nicht kennen lernst (die dein Programm im Fall des Auftretens durcheinander bringen)...
aber wenn der Hersteller keine Beschreibung seiner Erfindung veröffentlicht,
bleibt keine andere Möglichkeit.

Gruß
 
So über Umwege habe ich jetzt herausgefunden, das das Projekt Opensource ist.

Ich finde aber keine Möglichkeit, um mit PHP C++ anzusprechen.

So hab ich das jetzt mal zu lösen versucht:
PHP:
if (@!$fp = fsockopen("udp://testcenter.anhstudios.com",44463, $errno, $errstr, 1)){
	fwrite($fp, "username_ = aga");
	fwrite($fp, "password_ = blabla");

Resultat: Connection failed lt. Serverlog.
 
dH. du hast Zugriff auf einen Server?

Da kommt jetzt eben das PN-Thema ins Spiel.

Wenn der Server socketmäßig eine Verbindung hat, den Client aber trotzdem nicht anerkennt,
ist ziemlich sicher das Protokoll schuld.
dH., in welcher Form die Daten zu sein haben.

Du wirfst dem Server einen Bytehaufen a la "username_ = agapassword_ = blabla"
entgegen und sagst "Da, mach mal".
Auch, wenn das nur annähernd dem entspricht,w as der Server haben will,
fehlt min. ein Trennzeichen zwischen Namen und Passwort.
Sockets sind keine Textdateien, die man in Zeilen einteilen kann, nur pure Bytes.

Mit dem Unterschied PHP/C++ hat das nichts zu tun. TCP/IP bleibt TCP/IP.
Und die PHP-Sockets werden von der PHP-Runtime auch nur über C/C++ umgesetzt.

...
Das große Prolem ist jetzt eben, herauszufinden,
was du dem Server für welchen Sinn schicken musst.
Du beginnst mit Logindaten.
Eben so gut könnte der Server zuerst die Uhrzeit
in Form 3-Byte-int Sekunden, 3-Byte-int Minuten, 1-Byte-int Stunden
erwarten, um die Zeit des Clients mit seiner zu vergleichen
und die Zeitzone zu protokollieren

Ist das Problem klar?

Opensource ist schon mal hilfreich.
Schau zuerst nach, ob irgendwo ein Menschensprachiges Dokument ist,
das die Verbindungsdetails beschreibt.
Wenn nein, versuch das über den Code herauszufinden.
Unterstützend kannst du mit einem Netzwerksniffer "mitschauen",
was gerade über das Netzwerk läuft.

So ein Sniffer ist übrigens vor allem bei Closed-Source-Programmen
eines der Haupthilfsmittel beim Protokoll-ermitteln.
Dann ist aber oft auch eine größere Portion Glück/Fantasie/Raten dabei.
Bei Opensource sind Doku und Code die ersten Anlaufstellen.

Noch zur PN:
Und so ein Sniffer hat nicht (zwangsläufig) mit Hacken zu tun.
Einen weiteren Anwendungszweck kennst du jetzt ja.
Mitverfolgen, was welche Programme übers Internet senden/empfangen.
Kann auch zur Virensuche hilfreich sein...usw.

Gruß
 
Ich glaub, ich hab den Code isoliert, mit dem man beim Server eingeloggt wird.

C++:
login_client->SetUsername(message.username);
    login_client->SetPassword(message.password);
    login_client->SetVersion(message.client_version);

Wie spreche ich das jetzt mit PHP an?
 
Zurück