Ich habe ein Problem mit einem Serverquery Script, dass meinen Gameserver abfragt und die Abfrageergebnisse auf meiner Webseite anzeigt.
Es lief bisher vollkommen zufriedenstellend, jedoch wurde von meinem Webhoster die Firewalleinstellung geändert.
Seitdem arbeitet das Script nicht mehr.
Hier die Antwort des Serverbetreibers auf meine Anfrage:
[...]bezugnehmend auf unser Telefonat, möchte ich Ihnen bezüglich Ihres Scriptes folgendes mitteilen: Unsere Firewall ist so konfiguriert, dass Sie Pakete innerhalb der Ports 17.000 - 18.000 hereinlässt. Sie müssten also dafür sorgen, dass die Anfragen Ihrer Software von einem Port in diesem Bereich gestellt werden. Also z.B. Anfrage von Port 17500 auf 28960, dann kommt die Antwort auch auf Port 17500 bei unserem Server an.[...]
Da ich keine Ahnung habe, was ich ändern müsste, ist meine Frage an euch, ob und wie ich das Script wieder zum Laufen bekommen kann.
Ich habe es hier (auszugsweise) angefügt:
[COLOR=indigo]
<?php
$ip = "212.72.XXX.XX";
$port = 28961;
$erg = array();
$command = "\xFF\xFF\xFF\xFFgetstatus\n";
$verbindung=fsockopen("udp://".$ip."",$port,$errnr) or die($error."(".$errno.")") ;
fwrite($verbindung,$command,strlen($command));
do
{
$serverdata.=fgetc($verbindung);
$serverdatalen++;
$socketstatus=socket_get_status($verbindung);
}
while ($socketstatus["unread_bytes"] );
fclose($verbindung);
$serverdata = substr($serverdata,strpos($serverdata,"\n")+1);
$kette = strtok($serverdata,"\\");
while($kette)
{
$x++;
$array_name = $kette;
$kette = strtok("\\");
$erg["".$array_name.""] = "".$kette."";
$kette = strtok("\\");
}
$players=substr($serverdata,strpos($serverdata,"\n")+1);
$players = substr($players,0,strlen($players)-1);
$playercount=0;
if (strlen($players) > 0)
{
$playercollection=explode("\n",$players);
while (list($key,$data) = each ($playercollection))
{
eregi("^([-0-9]+) ([-0-9]+) \"(.*)\"",$data,$player);
$ol_playerinfo[$key]=array("pkt"=>$player[1],"ping"=>$player[2],"name"=>$player[3]);
$playercount++;
}
}
$erg["current_player"] = $playercount;
?>
<!-- Ab hier folgt die HTML-Ausgabe -->
[...][/COLOR]
Es lief bisher vollkommen zufriedenstellend, jedoch wurde von meinem Webhoster die Firewalleinstellung geändert.
Seitdem arbeitet das Script nicht mehr.
Hier die Antwort des Serverbetreibers auf meine Anfrage:
[...]bezugnehmend auf unser Telefonat, möchte ich Ihnen bezüglich Ihres Scriptes folgendes mitteilen: Unsere Firewall ist so konfiguriert, dass Sie Pakete innerhalb der Ports 17.000 - 18.000 hereinlässt. Sie müssten also dafür sorgen, dass die Anfragen Ihrer Software von einem Port in diesem Bereich gestellt werden. Also z.B. Anfrage von Port 17500 auf 28960, dann kommt die Antwort auch auf Port 17500 bei unserem Server an.[...]
Da ich keine Ahnung habe, was ich ändern müsste, ist meine Frage an euch, ob und wie ich das Script wieder zum Laufen bekommen kann.
Ich habe es hier (auszugsweise) angefügt:
[COLOR=indigo]
<?php
$ip = "212.72.XXX.XX";
$port = 28961;
$erg = array();
$command = "\xFF\xFF\xFF\xFFgetstatus\n";
$verbindung=fsockopen("udp://".$ip."",$port,$errnr) or die($error."(".$errno.")") ;
fwrite($verbindung,$command,strlen($command));
do
{
$serverdata.=fgetc($verbindung);
$serverdatalen++;
$socketstatus=socket_get_status($verbindung);
}
while ($socketstatus["unread_bytes"] );
fclose($verbindung);
$serverdata = substr($serverdata,strpos($serverdata,"\n")+1);
$kette = strtok($serverdata,"\\");
while($kette)
{
$x++;
$array_name = $kette;
$kette = strtok("\\");
$erg["".$array_name.""] = "".$kette."";
$kette = strtok("\\");
}
$players=substr($serverdata,strpos($serverdata,"\n")+1);
$players = substr($players,0,strlen($players)-1);
$playercount=0;
if (strlen($players) > 0)
{
$playercollection=explode("\n",$players);
while (list($key,$data) = each ($playercollection))
{
eregi("^([-0-9]+) ([-0-9]+) \"(.*)\"",$data,$player);
$ol_playerinfo[$key]=array("pkt"=>$player[1],"ping"=>$player[2],"name"=>$player[3]);
$playercount++;
}
}
$erg["current_player"] = $playercount;
?>
<!-- Ab hier folgt die HTML-Ausgabe -->
[...][/COLOR]