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(gdb) b 72
Breakpoint 1 at 0x8048747: file test2.c, line 72.
(gdb) run
Starting program: /home/guzzano/test
bytes: 101; data: ����m127.0.0.1:27017
Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
warning: Source file is more recent than executable.
73
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686
(gdb) p buf
$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@"...
(gdb) continue
Continuing.
bytes: 685; data: ����D
Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
73
(gdb) p buf
$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"...
(gdb) continue
Continuing.
bytes: 90; data: ����I0Galaxy Network Cs 1.6
Breakpoint 1, main (argc=1, argv=0xbffff3d4) at test2.c:73
73
(gdb) p buf
$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.