Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/01/2014, 16:45
Avatar de guzzano
guzzano
 
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Programa que recopile datos del servidor de un juego

Te dejaré algo que te ayudará para trabajar con servidores source y goldsource, ambos de valve.

https://developer.valvesoftware.com/wiki/Server_queries

Para poder trabajar con él, primero tienes que leer la guía que te mencionó vosk, para comprender como funcionas las redes, como tratarlas y demás. Luego en la guía te servirá para trabajar con éste tipo de servidores, CS, HL, CS:S y demás. Es una referencia.

Recuerda que no todos los juegos envían esa información de la misma forma. Por ejemplo, esta guía de arriba no te servirá para otros servidores como COD o demás, trabajan de forma diferente y ya queda de tu parte aplicar ingeniera inversa con un monitor de red, como wireshark o buscar guías en internet, es más posibles que siempre encuentres estas guías o pedazos de códigos en PHP, si comprendes el lenguaje, lo podrás pasar fácil a C.

Desde mi punto de vista, para hacer estas cosas, es necesario que comprendas un poco de un monitor de red, de un debugger como gdb, o también de una función que te devuelva todo en HEX, porque la mayoría de los datos que te devolverá no podrás imprimirlo con un simple printf.

Por ejemplo, los datos que te devolverá será algo así (usando en un ejemplo real mío):

Código TEXT:
Ver original
  1. (gdb) b 72
  2. Breakpoint 1 at 0x8048747: file test2.c, line 72.
  3. (gdb) run
  4. Starting program: /home/guzzano/test
  5. bytes: 101; data: ����m127.0.0.1:27017
  6.  
  7. Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
  8. warning: Source file is more recent than executable.
  9. 73     
  10. Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
  11. (gdb) p buf
  12. $1 = "\377\377\377\377m127.0.0.1:27017\000Galaxy Network Cs 1.6\000de_dust2_2006\000cstrike\000LtNGaming.com\000  /dw\000\001\000\000\000\001\000\000\000\000\000\000\000\001\000\001\000\360\377\277\024\356\377\277#\360\377\277\214\202\004\b\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\260+\000\370\270+\000\000\002\000\000\177ELF\001\001\001\003\000\000\000\000\000\000\000\000\003\000\003\000\001\000\000\000\200N-\000\064\000\000\000t\033\035\000\000\000\000\000\064\000 \000\n\000(\000K\000J\000\006\000\000\000\064\000\000\000\064\340+\000\064\340+\000@\001\000\000@"...
  13. (gdb) continue
  14. Continuing.
  15. bytes: 685; data: ����D
  16.  
  17. Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
  18. 73     
  19. (gdb) p buf
  20. $2 = "\377\377\377\377D\035\000-Death me! Synfield:)\000\000\000\000\000\220\242\017D\000tomoki-kun\000\000\000\000\000\200\201zB\000THE GHOST\000\000\000\000\000,H\311D\000Gold\000\000\000\000\000\200\230{B\000[C]arita[P]ro\000\000\000\000\000\000]\305A\000DerLakK\000\001\000\000\000\000\035,B\000*_*CHEO*_*\000\000\000\000\000\000\233\031B\000Maikol\000\000\000\000\000\000\304dB\000Arixon*-*\000\000\000\000\000\260\337AE\000ChAN3L | Arr3ChA la mariCA\000\000\000\000\000"...
  21. (gdb) continue
  22. Continuing.
  23. bytes: 90; data: ����I0Galaxy Network Cs 1.6
  24.  
  25. Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
  26. 73     
  27. (gdb) p buf
  28. $3 = "\377\377\377\377I0Galaxy Network Cs 1.6\000de_dust2_2006\000cstrike\000LtNGaming.com\000\n\000  \000dw\000\001\061.1.2.6/Stdio\000\200\211i\000[C]arita[P]ro\000\000\000\000\000\000]\305A\000DerLakK\000\001\000\000\000\000\035,B\000*_*CHEO*_*\000\000\000\000\000\000\233\031B\000Maikol\000\000\000\000\000\000\304dB\000Arixon*-*\000\000\000\000\000\260\337AE\000ChAN3L | Arr3ChA la mariC"...

Solo queda que tú apliques técnicas para parsear estos datos a una estructura y listo.

Un saludo.