PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Teamspeak Connection Test PHP



Fabian-fabignt
02.06.2007, 11:53
Hallo, wie kann man mit PHP einen Connection Test Durchführen?

PoLe
02.06.2007, 13:38
falsches forum ? frag in php foren nach, was hat das mit teamspeak zutun?

habs mal hierhin verschoben

JambaRatte
02.06.2007, 18:05
Er hat ja schon einen thread eröffnet, der aber schon geclosed wurde ;)

http://de.php.net/manual/de/function.fsockopen.php

Fabian-fabignt
02.06.2007, 22:57
Genau, doch leider blick ich da net so durch mit dem fsockopen :oops: .
Wäre echt nett wenn mir das mal einer erklären könnte. *hoff*

praet0rian
03.06.2007, 23:40
naja daran kommste aber net vorbei ... du machst nen fsockopen auf den TS Port und wenn er dir TRUE zurückliefert läuft auf dem Port etwas ... also entsprechend dein Teampseak eben. Wenn du fsock net raffst ... geh auf php.net die Doku ist very good ... und in den Kommentaren sind zu hauf Anwendungsbeispiele.

Fabian-fabignt
04.06.2007, 12:13
Jo. Aber auf es joint kein Bot Player auf meinen Server... Das ist ja das was ich erreichen will. :D UNd dafür muss man dann ja halt die datenpakete von nem player faken und per PHP versenden, ich weiß aber net wie man die pakete versendet .... *brauchhilfe*

praet0rian
04.06.2007, 17:06
ja steht doch alles auf PHP.net wie ich schon sagte!!!!!!!!!!!!!!!!


<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>

Er macht nen socket zu nem Webserver auf und schickt die Befehle per fwrite an den Server .... jetzt musst du dir nur noch das Protokoll von TS zu gemüte führen un dem Server die Pakete senden .... allerdings solltest du dir gedanken machen was passiert wenn dein script ausläuft ... was ja bei üblichen PHP Installationen nach etwa 30 Sek. der Fall ist ....

JambaRatte
04.06.2007, 17:27
Das script läuft nach der standart PHP.ini nicht minimal 30 sekunden, sondern maximal 30 sekunden. Sonst würde der browser ja bei jeder webseite mindestens 30 sekunden laden, auch wenn die seite bereit aufgebaut ist.
Zum auslaufen:
Stichwort cronjob.

<?php
set_time_limit(0); //Maximale ausführungszeitzeit: unbegrenzt
ignore_user_abort(TRUE); //Script soll nach abbruch der verbindung mit dem clienten weiter laufen

function machwas()
{
sleep(10); //30 sekunden warten
machwas(); //funktion erneut aufrufen
}
machwas();
?>
Das script sollte natürlich besser per shell ausgeführt werden und nicht per browser. Dazu muss der safe_mode off sein!
Anderes beispiel:

<?php
set_time_limit(0); //Maximale ausführungszeitzeit: unbegrenzt
ignore_user_abort(TRUE); //Script soll nach abbruch der verbindung mit dem clienten weiter laufen

while(TRUE)
{
sleep(10); //30 sekunden warten
}
?>
Alle 10 sekunden wird der code in der function bzw in der schleife ausgeführt.
Zu dem teamspeak-problem:

<?php
$ipaddy = '127.0.0.1';
$port = 8767;

$sock = fsockopen('udp://'.$ipaddy, (int)$port, $num; $error, 30) || die('Fehler! Fehlernummer:'.$num."\n".'Fehler:'.$error);

fputs(das ganze teamspeak zeug);
?>

Fabian-fabignt
04.06.2007, 17:34
Geil, das hat mich einen großen schritt weitergebracht jetzt muss ich es nur noch schaffen herauszufinden was ich für Pakete senden muss. Muss ich die dann einfach bei
$out = "datenpaketehier"; schreiben ???

JambaRatte
04.06.2007, 17:39
Prinzipiell schon. Aber du musst bedenken, dass du keinen browser simulieren willst, wie in dem beispiel oben per TCP. Du musst einen UDP-sock öffnen und das als protokoll angeben.

Fabian-fabignt
04.06.2007, 18:02
DANKE ! :D Weiß denn einer von euch das, was ich bei Teamspeak zeug hin schreiben soll???

Edit:
bin mir nicht sicher ob das die paktet sein solle(sieht er aus wie buchstaben), hab aber bis jetzt das hier. Funktioniert aber nicht :cry:

<?php
$fp = fsockopen("udp://xx.x.xx.x.xx", xxxx, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
fputs($fp, chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF). chr(0xFB).
chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF). chr(0xFB).
chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF). chr(0xFC).
chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF). chr(0xFA).
chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18). chr(0xFF).
chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00). chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C). chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF). chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF). chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58). chr(0x54).
chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0)) ;
fputs($fp, chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF). chr(0xFC).chr(0x21));
echo "Hallo";
}
?>
P.S Das Hallo wird angezeigt.

praet0rian
04.06.2007, 20:16
Das script läuft nach der standart PHP.ini nicht minimal 30 sekunden, sondern maximal 30 sekunden. Sonst würde der browser ja bei jeder webseite mindestens 30 sekunden laden, auch wenn die seite bereit aufgebaut ist.

Hat jemand was von minimal gesagt?

Aber netter code ... muss für die Manipulation der ini variablen zur laufzeit nicht auch der safe mode off sein ... der bei den meisten providern on ist?

JambaRatte
04.06.2007, 22:19
...
Das script sollte natürlich besser per shell ausgeführt werden und nicht per browser. Dazu muss der safe_mode off sein!
Anderes beispiel:
...

Da stehts doch...

.... allerdings solltest du dir gedanken machen was passiert wenn dein script ausläuft ... was ja bei üblichen PHP Installationen nach etwa 30 Sek. der Fall ist ....
Das script läuft nach dem interpretieren aus. Es kommt nur auf die länge des codes an und auf die befehle, die interpretiert werden müssen. Beich einem

<?php
echo 'hi';
?>
Wird das script sicher keine 30 sekunden laufen.

Fabian-fabignt
05.06.2007, 05:26
Weiß denn einer was ich an den TS Server senden muss oder wie ich es rausbekomme ??

Bei meinem ist der Safe mode aus ^^.... :lol:

praet0rian
05.06.2007, 07:36
jetzt wäre es denke ich Zeit sich im Teamspeak Forum mit den wissenden Leuten über das Protokoll zu unterhalten.

Fabian-fabignt
05.06.2007, 13:13
Ok. Wenn ich dann die Datenpakete habe dann post ich das hier rein. Also bitte nicht CLOSEN.. Big THX noch mal an euch :D .

Fabian-fabignt
05.06.2007, 14:51
Hab nen Paket mit nem Programm gefunden.. Kann man das so schon verschicken oder muss ich das noch umformen oder evntl. in dem Programm das Paket erst Packen oder ähnliches ?

Hier das Paket:(Aus der Hex ansicht wenn das richtig ist)

0000 00 14 6c 36 39 4b 00 15 f2 2a 62 9c 08 00 45 00 ..l69K.. .*b...E.
0010 00 d0 bc 61 00 00 80 11 ef 62 c0 a8 00 02 d5 ca ...a.... .b......
0020 f7 e3 05 ea 22 3f 00 bc ec 5b f4 be 03 00 00 00 ...."?.. .[......
0030 00 00 00 00 00 00 01 00 00 00 20 50 40 d2 09 54 ........ .. P@..T
0040 65 61 6d 53 70 65 61 6b 00 00 00 00 00 00 00 00 eamSpeak ........
0050 00 00 00 00 00 00 00 00 00 00 00 00 0a 46 61 62 ........ .....Fab
0060 69 61 6e 73 20 54 53 00 00 00 00 00 00 00 00 00 ians TS. ........
0070 00 00 00 00 00 00 00 00 00 00 02 00 00 00 20 00 ........ ...... .
0080 3c 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 <....... ........
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00c0 06 46 61 62 69 61 6e 00 00 00 00 00 00 00 00 00 .Fabian. ........
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ......

Fabian-fabignt
08.06.2007, 18:53
ICH BRAUCHE EURE HILFE BIITTEE!