Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> podłączenie do serwera counter-strike i..., przypisanie wartości komendy do zmiennej
Najki
post 3.01.2005, 01:30:45
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Pytanie kieruję do osób obeznanych w tym temacie (php-CS)

Po pierwsze: skrypt musi podłączyć się do serwera gry Counter-Strike (np. 62.21.96.9:27016).
Po drugie: skrypt powinien wprowadzić hasło RCON.
Po trzecie: skrypt powinien sprawdzić wartość komendy "sv_password" (lub innej) i przypisać go do zmiennej (lub tablicy) w php.

Jak to zrobić? Może ktoś ma już coś takiego gotowego?


--------------------
Go to the top of the page
+Quote Post
hwao
post 3.01.2005, 08:12:04
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Sam nie dawno cos takiego pisalem tylko nie pamietam nic kodu...
Wiem ze otwiera sie polaczenie fsockopen" title="Zobacz w manualu PHP" target="_manual() na podanym ip i porcie. Jak sie uda to otrzymujesz dane od serwera po wyslaniu odpowiednich pakietow (na jakiejsc stronie bylo opisane co wysylac zeby co dostac). Wiem tez ze sprawa sie komplikowala w roznych wersjach (1.5 1.6 source ). Opisz jakiej potrzebujesz to moze pomoge
Go to the top of the page
+Quote Post
Najki
post 3.01.2005, 08:42:12
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Dzięki, byłoby super!

Ja potrzebuje do wersji 1.6.
W sumie jedyna komenda, której sprawdzenie mi wystarczy to "sv_password" (hasło na serwer), ale gdyby była możliwość prostego zadawania innych zapytań (np. przez jakąś tablicę czy coś) to byłoby jeszcze bardziej super winksmiley.jpg.


--------------------
Go to the top of the page
+Quote Post
hwao
post 3.01.2005, 08:46:04
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Jeszcze przed szkola dam narazie tyle:
http://phphomepage.mirrors.phpclasses.org/...1815.html#class
http://www.hosthideout.com/archive/index.php/t-1611.html

Jak wroce postaram sie o wiecej
Go to the top of the page
+Quote Post
Najki
post 3.01.2005, 17:16:09
Post #5





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


To pierwsze jest do CS Source, więc raczej niewiele mi da.

Mówisz, że niedawno coś takiego pisałeś. Nie masz już ani śladu po kodzie?


--------------------
Go to the top of the page
+Quote Post
hwao
post 4.01.2005, 19:38:16
Post #6


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Niestety kodu nie mam ale moge sporobwac pomuc odezwij sie domnie na jakims komunikatorze (dane w mojim profilu)
Go to the top of the page
+Quote Post
ennics
post 5.01.2005, 21:01:12
Post #7





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

Ostrzeżenie: (0%)
-----


koledzy, jeśli można by było upublicznić Wasze privy to byłbym wdzięczny, mam podobny orzech do zgryzienia.

Najki, próbowałem CURL, ale narazie bez większych efektów.

pozdr.!

Ten post edytował ennics 5.01.2005, 21:01:30


--------------------
Go to the top of the page
+Quote Post
Najki
post 5.01.2005, 22:24:38
Post #8





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


To może popracujemy nad tym razem, lub coś? Hwao niewiele mi zdążył pomóc przed padem GG.

Znalazłem skrypt phpRCON (logowanie, zarządzanie serwerem, odpalanie komend, listy banów etc). Jest w nim klasa Rcon, którą możnaby jakoś przerobić. Ja niestety nie znam się na klasach, nie wiem jak ich skutecznie używać itp., więc ktoś musiałby tu pomóc (ennics? hwao?). To jest ta klasa:
http://bez-strachu.pl/najki/rcon_hl_net.txt
To co robimy dalej? tongue.gif


UPDATE: Znalazłem coś ciekawego.
Plik "librcon.php"
  1. <?
  2. #Lib half-life rcon v 0.2 by Mariusz \"Aiv\" Dalewski <aiv@battlefield1942.pl>
  3. function rcon_open($ip, $port) {
  4. $socket = fsockopen(&#092;"udp://$ip\", $port, $err1, $err2);
  5. return $socket;
  6. }
  7.  
  8. function rcon_close($socket) {
  9. fclose($socket);
  10. }
  11.  
  12. function rcon_public_command($socket, $command, $timeout = 5) {
  13. fwrite($socket,&#092;"xFFxFFxFFxFF$command0\");
  14. socket_set_timeout($socket, $timeout);
  15. $response = rcon_read($socket);
  16. return $response;
  17. }
  18.  
  19. function rcon_command($socket, $challenge, $password, $command, $timeout = 5) {
  20. fwrite($socket,&#092;"xFFxFFxFFxFFrcon $challenge \"$password\" $command0\");
  21. socket_set_timeout($socket, $timeout);
  22. $response = rcon_read($socket);
  23. return $response;
  24. }
  25.  
  26. function rcon_get_challenge($socket, $timeout = 5) {
  27. fwrite($socket,&#092;"xFFxFFxFFxFFchallenge rcon0\");
  28. socket_set_timeout($socket, $timeout);
  29. $header = fread($socket, 5);
  30. $status = socket_get_status($socket);
  31. $package = fread($socket, $status['unread_bytes']);
  32. $challenge = explode(' ', trim($package));
  33. $response = $challenge[2];
  34. return $response;
  35. }
  36.  
  37. function rcon_read($socket) {
  38. while($header = fread($socket, 5)) {
  39. $status = socket_get_status($socket);
  40. $package = fread($socket, $status['unread_bytes']);
  41. $headers[] = $header;
  42. $packages[] = $package;
  43.  
  44. if (substr($package, 2, 2) == &#092;"x00x12\") {
  45. $packages_more[$header] = $package;
  46. }
  47. }
  48.  
  49. for($i = 0; $i != count($packages); $i++) {
  50. if (substr($packages[$i],2,2) == &#092;"x00x02\") {
  51. $package_more = $packages_more[$headers[$i]];
  52. $package_more = substr($package_more,4);
  53. $package_more = substr($package_more,0,strlen($package_more)-1);
  54. $package = $packages[$i];
  55. $package = substr($package,10);
  56. $package .= $package_more;
  57. $new[] = $package;
  58. } elseif (substr($packages[$i],2,2) != &#092;"x00x12\" && substr($packages[$i],strlen($packages[$i])-2) == \"x00x00\") {
  59. $packages[$i] = substr($packages[$i],0,strlen($packages[$i])-2);
  60. $new[] = $packages[$i];
  61. }
  62. }
  63. if ($new)
  64. $response = @implode('', $new);
  65. else
  66. $response = @implode('', $packages);
  67.  
  68.  return $response;
  69. }
  70.  
  71. function parse_info($package) {
  72. $parse = explode(&#092;"0\", $package);
  73. $response[address] = $parse[0];
  74. $response[hostname] = $parse[1];
  75. $response[map] = $parse[2];
  76. $response[gamedir] = $parse[3];
  77. $response[description] = $parse[4];
  78. $response[players] = ord($package[strlen($package)-3]);
  79. $response[max] = ord($package[strlen($package)-2]);
  80. $response[protocol] = ord($package[strlen($package)-1]);
  81. return $response;
  82. }
  83.  
  84. function parse_infostring($package) {
  85. $parse = explode(&#092;"0\", $package);
  86. $parse = explode(&#092;"\", $parse[1]);
  87. for ($i = 1; $i < count($parse); ($i += 2)) {
  88. $response[$parse[$i]] = $parse[($i+1)];
  89. }
  90. return $response;
  91. }
  92.  
  93. function parse_players($package) {
  94. $users = ord($package[0]);
  95.  
  96. $offset = 1;
  97. for ($i = 0; $i < $users; $i++) {
  98. $gracz = ord($package[$offset++]);
  99.  
  100. $nick = '';
  101. while ($package[$offset] != &#092;"x00\") {
  102. $nick .= $package[$offset];
  103. $offset++;
  104. }
  105. $offset++;
  106.  
  107. $llong = unpack(&#092;"llong\",$package[$offset].$package[$offset+1].$package[$offset+2].$package[$offset
    +3]);
  108. $frags = $llong['long'];
  109. $offset += 4;
  110.  
  111. $ffloat = unpack(&#092;"ffloat\",$package[$offset].$package[$offset+1].$package[$offset+2].$package[$offset
    +3]);
  112. $time = $ffloat['float'];
  113. $offset += 4;
  114.  
  115. $minutes = floor($time / 60);
  116. $h = floor($minutes / 60);
  117. $seconds = floor($time - ($minutes * 60));
  118. $minutes = $minutes - ($h * 60);
  119.  
  120. $time = sprintf(&#092;"%02s:%02s:%02s\", $h, $minutes, $seconds);
  121.  
  122. $response[$i][id] = $gracz;
  123. $response[$i][nick] = $nick;
  124. $response[$i][frags] = $frags;
  125. $response[$i][time] = $time;
  126. }
  127. return $response;
  128. }
  129.  
  130. function parse_rules($package) {
  131. $parse = explode(&#092;"0\", $package);
  132. for ($i = 1; $i < count($parse); ($i=$i+2)) {
  133. $response[$parse[$i]] = $parse[($i+1)];
  134. }
  135.  
  136. return $response;
  137. }
  138. ?>

Plik "test.php"
  1. <?
  2. include('librcon.php');
  3. $ip = 'your server ip';
  4. $port = 'your server port';
  5. $rcon_password = 'your rcon password';
  6. $command = 'command';
  7.  
  8. // Public query
  9. $socket = rcon_open($ip, $port);
  10. $response = rcon_public_command($socket, 'infostring');
  11. $infostring = parse_infostring($response);
  12. rcon_close($socket);
  13. print_r($infostring);
  14.  
  15. // Rcon
  16. $socket = rcon_open($ip, $port);
  17. $challenge = rcon_get_challenge($socket);
  18. $command = rcon_command($socket, $challenge, $rcon_password, $command);
  19. rcon_close($socket);
  20. print_r($command);
  21. ?>

Jest git! smile.gif

Ten post edytował Najki 5.01.2005, 23:35:32


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 13:34