Netstat me ment? ^^

Bonjour,

j’essayer de récupérer le nombre de joueurs connectés sur un serveur de jeux, dans ce cas: Counter-Strike Source:

Voilà le résultat de la commande:

root@sd-36147:/var/run# netstat -an | grep 27315
tcp 0 0 88.190.41.19:27315 0.0.0.0:* LISTEN
tcp 0 0 88.190.41.19:27315 88.161.144.36:53163 ESTABLISHED
udp 720 0 0.0.0.0:27315 0.0.0.0:*
root@sd-36147:/var/run#

Le seul problème est qu’a ce moment il y avait 11 personnes de connectées.

J’ai essayer pour un serveur minecraft et les infos sont pourtant cohérente:

Pour 8 joueurs:

root@partenaire:~# netstat -an | grep 25565
tcp6 0 0 88.190.212.86:25565 :::* LISTEN
tcp6 0 0 88.190.38.8:25565 :::* LISTEN
tcp6 0 39 88.190.38.8:25565 213.44.176.227:58536 ESTABLISHED
tcp6 0 39 88.190.38.8:25565 213.44.176.227:64298 ESTABLISHED
tcp6 0 0 88.190.38.8:25565 79.86.159.221:53427 TIME_WAIT
tcp6 0 118 88.190.38.8:25565 79.82.86.14:53265 ESTABLISHED
tcp6 0 0 88.190.38.8:25565 141.135.7.178:49215 ESTABLISHED
tcp6 0 0 88.190.38.8:25565 89.159.232.111:52808 ESTABLISHED
tcp6 0 72 88.190.38.8:25565 90.60.139.88:64357 ESTABLISHED
tcp6 0 68 88.190.38.8:25565 92.141.16.113:49218 ESTABLISHED
tcp6 0 65 88.190.38.8:25565 86.212.250.90:50198 ESTABLISHED

Ca tombe pile poil.

Savez vous d’ou peut venir le problème?

est-ce que netstat est un commande “lourde” à ne pas utiliser toutes les 5 minutes par exemple?

Merci pour l’aide.

tu as netstaté sur deux machine differente ?

& root@partenaire:~#

pas les deux meme : grep 27315 & grep 25565

Oui c’est normal les serveurs de jeux ne sont pas sur la même machine !

et la range d’ip differentes sont deux jeux diffrent je presume

L’ip côté serveur est la même pour tout le monde, seul les ports les différenties.

après je le contente de compter les ESTABLISH pour connaitre le nombre de connecté.

je comprend vraiment pas comment netstat peut ne pas afficher des connections existantes; a moins que le serveur utilise d’autre ports à sa discretion mais c’est fort peut probable…

Apparemment CS utilise UDP, or contrairement à TCP, UDP n’a pas la notion de connexion et le serveur peut donc utiliser une même socket UDP pour communiquer avec tous les clients.

+1

il y a un outils qui permettrait de le faire tout de meme , iptraf surment mai pas très pratique :\
wireshark existe peux être en console ?

Oui, tshark. Ou bien tcpdump. Mais ils font de la capture de paquets, pas de la comptabilité de connexions, ce ne sont pas les outils les plus adaptés.
iptraf ou htop sont probablement plus adaptés.
Sinon, si le suivi de connexion IPv4 de netfilter est actif (module nf_conntrack_ipv4 chargé), il est possible d’extraire des informations de /proc/net/nf_conntrack pour afficher ou compter le nombre de connexions récentes sur un port donné avec par exemple

Je pense qu’un “grep sport=27015” /proc/net/ip_conntrack
devrait te donner les connexions sur le port en question, usuellement les connexions en UDP ne restent que 1 à 2 minutes dans la table mais dans la mesure où il y a des échanges en permanence, ça doit être fiable. À noter que tu auras également les connexions de ce qui ne joue pas. Mais peut être est-il plus simple de passer par la «rconsole» du serveur de jeu? J’avais fait à l’époque un système de stats fondés sur l’utilisation de rconsole pour un serveur CS, tu dois avoir les restes de ça ici http://boisson.homeip.net:8080/ada.php (source paquet rconhlds chez moi). Tu peux éventuellement lancer ton serveur en récupérant la sortie écran sur un fichier via script ou tee par exemple.

J’ai finalement trouver une sorte d’api open source qui utilise directement les sockets (game Q); c’est en PHP et fonctionne pour une bonne centaine de jeux.

Ca à l’air léger même si je privilégie toujours le sh plutôt que PHP.

Cela dit pour Minecraft je garde la solution du netstat avec le plus filtes pour avoir la réponse la plus light.

Merci pour vos conseils