View Full Version : TeamSpeak PORT Pingen / Überprüfen
CodeRedZ
08-05-2008, 16:08
Hallo,
Habe volgendes Problem,
Ich bin Privat TS und Webspace hoster und würde auf meiner Homepage gerne eine Seite mit Port checks einbauen, was auch funktioniert, solange es es ein http port ist....
Hab mir mal folgenden Code mit google gesucht...
Code:
<?php
$server = "127.0.0.1";
$port = "80";
$port2 = "6667";
$timeout = "10";
if ($server and $port and $timeout) {
$verbinding = @fsockopen("$server", $port, $errno, $errstr, $timeout);
$ircbinding = @fsockopen("$server", $port2, $errno, $errstr, $timeout);
}
if($verbinding) {
echo "<img src='./images/on.gif'>Website is online<br>";
}
else {
echo "<img src='./images/off.gif'>Website is offline<br>";
}
if($ircbinding) {
echo "<img src='./images/on.gif'>IRC Server is online<br>";
}
else {
echo "<img src='./images/off.gif'>IRC Server is offline<br>";
}
?>
Funktioniert auch ganz nett, nur TeamSpeak verwendet scheinbar ne eigene Art von Ports, die mit diesem Code nicht abrufbar sind ;(
jemand ne Idee?
Wenn jemand seinen Code Testen will = "server4.at:150" ist einer meiner TeamSpeak Ports
danke schonmal!
lg
da hast du schonmal einige fehler gemacht.
1. falscher forenbereich
2. du lässt teamspeak mit ROOT rechten laufen, was man grundsätzlich bei KEINEM programm, also nicht nur teamspeak, machen sollte. es sei denn, du magst es, wenn dein server "gehackt" wird.
3. teamspeak verwendet das UDP protokoll, mit diesem script kannst du aber nur TCP protokolle überprüfen. eine möglichkeit, um die teamspeakserverinstanz zu überprüfen wäre es, den TCPqueryport des servers (standart: 51234) oder den webinterfaceport (standart: 14534) mit diesem script zu überprüfen. wenn diese verbindung klappt, dann laufen zu 99,9% auch die virtuellen teamspeakserver.
CodeRedZ
08-05-2008, 17:21
Hallo,
danke für die schnelle und ausführliche Antwort,
Sorry fürs falsche forum, es steht jedoch überall im German forum nur "Client" und da schien mir allgemein noch am passendsten. Trotzdem Sorry,
Nun das das Script irgendwie nicht passt hab ich festgestellt, und die abfrage auf den 51234 port hab ich schon eingebaut, jedoch hätte ich gerne das es für jeden TS (virtuellen) server (jeder port) eine eigene statusabfrage gibt.
Aber immerhin weiß ich jetzt mal nach was ich suchen muss, vielen dank!
lg
eine überprüfung für einen UDPport wirst du wahrscheinlich nicht finden, da UDP ein verbindungsloses protokoll ist und der ts2-server erst bestimmte daten empfangen muss, damit er sich überhaupt meldet und du somit feststellen kannst, ob dieser online ist oder nicht.
CodeRedZ
08-05-2008, 17:59
Das heißt ich müsste ihm dann ein Login oder ähnliches mitschicken damit er antwortet und das echo gibt oder der entsprechende port online ist oder nicht?
lg
so in etwa, ja. dazu müsstest du aber erst einmal wissen, wie die jeweiligen pakete von teamspeak aussehen, um diese versenden zu können ;)
aber es ist wohl einfacher, eine verbindung mit dem queryinterface aufzubauen, "sl" einzugeben und auszulesen, ob der port mit dem server xyz läuft;)
Hallo,
so in etwa, ja. dazu müsstest du aber erst einmal wissen, wie die jeweiligen pakete von teamspeak aussehen, um diese versenden zu können ;)
aber es ist wohl einfacher, eine verbindung mit dem queryinterface aufzubauen, "sl" einzugeben und auszulesen, ob der port mit dem server xyz läuft;)
dem kann ich nur zustimmen.
Für Abfragen und deren Weiterverarbeitung kann ich dir cyts.class" (http://ancient.absurdcoding.org/cyts/) empfehlen.
mfg
AMA
CodeRedZ
08-05-2008, 18:45
Ok, das heißt ich bastle n script das
"telnet <host> 51234
sl
eintippt, aber mit welchem "code" oder parametern lass ich dann das ergebniss ausfiltern, und auf der Homepage anzeigen?
lg
CodeRedZ
08-05-2008, 18:46
Hallo,
dem kann ich nur zustimmen.
Für Abfragen und deren Weiterverarbeitung kann ich dir cyts.class" (http://ancient.absurdcoding.org/cyts/) empfehlen.
mfg
AMA
ohje, alles auf englisch.... nicht gerade meine stärke ;)
lg
<?php
$ip = "127.0.0.1";
$port = 51234;
$udpport = 8767;
$conn = @fsockopen($ip, $port, $errno, $errstr,2);
if ($conn){
$data = fread($conn,128);
fputs($conn,"sel $udpport\r\n");
$data = fread($conn,2048);
echo "received data:\r\n".$data;
if (preg_match("/^OK/", $data) == 1){
echo "Virtual Server with Port $udpport online!\r\n";
}else{
echo "Virtual Server with Port $udpport offline!\r\n";
}
fclose ($conn);
}else{
echo "Connecting to Queryport $port on Server $ip failed!\r\n";
}
?>sollte funktionieren. kannste umbauen, wie du grade lustig bist ;)
CodeRedZ
08-05-2008, 19:21
VVIIIIEEEELLLLLLLen dank schonmal :)
werds gleich ausprobieren ;)
lg
CodeRedZ
08-05-2008, 19:26
/* echo "received data:".$data; */
ansonsten kanns ichs so lassen ;) will das in eine online tabelle einfügen, da is der ewige zahlencode im weg ;)
vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen, vielen,
DANK, so tollen support hätte ich echt nicht erwartet, vielen vielen dank!
Liebe grüße aus Wien, Alex
copy und paste ist schon ne tolle erfindung:rolleyes:
hab meinen post oben nochmal editiert. der alte code hat auch ausgegeben, dass z.b. der server mit port 1234 läuft, wenn noch nen server mit 12345 gestartet ist.
jetz sollte es aber 100%ig funktionieren;)
CodeRedZ
08-05-2008, 19:52
hehe ja is ne tolle funktion,
hab den code mal so angepasst,
<table> <?php
$ip = "server4.at";
$port = 51234;
$udpport = 50;
$udpport1 = 150;
$conn = @fsockopen($ip, $port, $errno, $errstr, 2);
if ($conn){
$data = fread($conn,128);
fputs($conn,"sl\r\n");
$data = fread($conn,2048);
/* echo "received data:".$data; */
if (strpos($data,"$udpport")){
echo "<tr><td>Port: $udpport</td><td> </td><td><b><font color='00FF00'>Online</font> <img src='./images/online.gif'></td></tr>\r\n";
}else{
echo "<tr><td>Port: $udpport</td><td> </td><td><b><font color='FF0000'>Offline</font> <img src='./images/online.gif'></td></tr>\r\n";
}
if (strpos($data,"$udpport1")){
echo "<tr><td>Port: $udpport1</td><td> </td><td><b><font color='00FF00'>Online</font> <img src='./images/online.gif'></td></tr>\r\n";
}else{
echo "<tr><td>Port: $udpport1</td><td> </td><td><b><font color='FF0000'>Offline</font> <img src='./images/online.gif'></td></tr>\r\n";
}
fclose ($conn);
}else{
echo "Connecting to Queryport $port on Server $ip failed!\r\n";
}
?> </table>
Jetzt muss ich nur noch für jeden vorhandenen Port die "if" abfrage kopieren und dann sieht das perfekt aus ;)
vielen dank nochmal!
und schon wieder einer, der seinen teamspeakserver mit ROOTRECHTEN gestartet hat (wir brauchen doch den kopf -> wand smiley:D)
wenn du mehrere ports überprüfen willst, dann nimm doch BITTE eine schleife zur hilfe, sonst produzierst du wieder überflüssigen datenmüll...
<?php
$ip = "127.0.0.1";
$port = 51234;
$udpport = array(8767,1234,1337);
$conn = @fsockopen($ip, $port, $errno, $errstr,2);
if ($conn){
$data = fread($conn,128);
foreach($udpport as $udp){
fputs($conn,"sel $udp\r\n");
$data = fread($conn,128);
echo "received data:\r\n".$data;
if (preg_match("/^OK/", $data) == 1){
echo "Virtual Server with Port $udp online!\r\n";
}else{
echo "Virtual Server with Port $udp offline!\r\n";
}
}
fclose ($conn);
}else{
echo "Connecting to Queryport $port on Server $ip failed!\r\n";
}
?>das ganze ist natürlich beliebig erweiterbar.
CodeRedZ
08-05-2008, 19:59
Ich glaub ich muss doch auf den Upgedateten Code umsteigen,
bei der 3ten abfrage zeigt er an port 55 ist offline, bei 50 und 150 zeigt er korekt online an.... schenll nochmal umbaslten ;)
CodeRedZ
08-05-2008, 20:02
und schon wieder einer, der seinen teamspeakserver mit ROOTRECHTEN gestartet hat (wir brauchen doch den kopf -> wand smiley:D)
Hab mich heute schon damit rumgeärgert.
Server lässt sich mit nem anderen user nicht starten, kommt immer n error,
wobei ich auch erstmal rausfinden muss welche yast gruppen berechtigt sind, oder am bessten wie ich ne neu gruppe anlege der NUR den einen prozess starten kann ;) damit spiel ich mich dann noch :)
Hab mich heute schon damit rumgeärgert.
Server lässt sich mit nem anderen user nicht starten, kommt immer n error,
wobei ich auch erstmal rausfinden muss welche yast gruppen berechtigt sind, oder am bessten wie ich ne neu gruppe anlege der NUR den einen prozess starten kann ;) damit spiel ich mich dann noch :)
wenn man sich an die anleitung hält und den server einfach gleich am anfang schon mit dem richtigen user installiert, dann kriegt man auch später keine probleme mit der rechtevergabe und dem besitz von dateien. aber die meisten installieren ja grundsätzlich ALLES mit root und wundern sich später, warum die anderen benutzer die anwendung nicht starten können oder auf die dateien zugreifen können...
das ist aber ganz einfach: DIE DATEIEN GEHÖREN ROOT, DER MEHR RECHTE ALS NEN BILLIGER BENUTZER HAT!:rolleyes:
CodeRedZ
08-05-2008, 20:20
den besitzer des ordners hab ich im yast schon geändert, aber bekomm eben immer die meldung "Error, Daemon not startet" <-- oder so auf die art eben...
lg
den besitzer des ordners hab ich im yast schon geändert, aber bekomm eben immer die meldung "Error, Daemon not startet"völlig egal, der server sollte trotzdem laufen, solange die rechte wirklich richtig angepasst sind ;)
vBulletin® v3.7.3, Copyright ©2000-2009, Jelsoft Enterprises Ltd.