#1 Le 15/03/2014, à 16:27
- Hazender
récupérer les noms des connectés depuis un fichier log
Salut tout le monde j'écris actuellement un script de service pour un serveur de jeux et j'aimerais via une commande affiché le nom des connecté au serveur
Le seul moyen que j'ai trouvé est de recherché dans le fichier log ou à chaque connections/déconnections est inscrit :
Info: UniverseServer: Client 'User1' <1> (80.185.xxx.xx:xxxxx) connected
Info: UniverseServer: Client 'User1' <1> (80.185.xxx.xx:xxxxx) disconnected
Je n'est mis ici que les lignes du log qui m'intéresse.
A l'aide d'une commande sed j'arrive à récupérer le nom de l'utilisateur mais pas à le supprimer lorsque se même utilisateur se deco et je ne trouve pas comment faire... ma commande :
#!/bin/bash
.players () {
variable=$(sed -rn "s/^\s*Info: UniverseServer: Client\s*\s*'(.*)'.*$/\1/p" MonFichierLog)
echo -e "${variable}"
}
case "$1" in
.players)
.players
;;
esac
Je me retrouve donc avec le nom qui s' affiche pour chaque connexion déconnexion et non pas avec juste le nom des joueurs connecter.
A savoir le fichier log est vidé chaque fois que l'on coupe le serveur de jeux.
Pouvez vous m'aider ?
Merci d'avance.
Dernière modification par Hazender (Le 15/03/2014, à 16:42)
Hors ligne
#2 Le 15/03/2014, à 17:15
- pingouinux
Re : récupérer les noms des connectés depuis un fichier log
Bonjour,
Peut-être ceci, si j'ai bien compris :
.players () {
while read user
do
n_connect=$(grep -c "\s*'$user'.*\bconnected" MonFichierLog)
n_disconn=$(grep -c "\s*'$user'.*\bdisconnected" MonFichierLog)
(( n_connect>n_disconn )) && echo "$user"
done < <(sed -rn "s/^\s*Info: UniverseServer: Client\s*'(.*)'.*\bconnected.*$/\1/p" MonFichierLog|sort -u)
}
Hors ligne
#3 Le 15/03/2014, à 19:35
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
Alors la je suis abasourdi réponse rapide efficace qui marche tout de suite et fais exactement ce que je veux oO
Bon en revanche je ne suis pas sur de tout comprendre tu recherche en 1er lieu avec un do pour recherché au moins une fois les connected et les disconnected pour un même nom d'utilisateur et tu compare si il y a plus de connected ça signifie que l'utilisateur est connecté ?
Je te remercie énormément et si tu as le temps si sur la même ligne je voulais l'ip de l'utilisateur ?
Dernière modification par Hazender (Le 15/03/2014, à 19:36)
Hors ligne
#4 Le 15/03/2014, à 20:12
- pingouinux
Re : récupérer les noms des connectés depuis un fichier log
Je suppose qu'un "user" a toujours la même "ip". Voici déjà la commande modifiée. Si tu as besoin d'explications, je les donnerai plus tard.
.players () {
while read user ip
do
n_connect=$(grep -c "\s*'$user'.*\bconnected" MonFichierLog)
n_disconn=$(grep -c "\s*'$user'.*\bdisconnected" MonFichierLog)
(( n_connect>n_disconn )) && echo "$user $ip"
done < <(sed -rn "s/^\s*Info: UniverseServer: Client\s*'(.*)'.*(\([^)]+\))\s*connected.*$/\1 \2/p" MonFichierLog|sort -u)
}
Dernière modification par pingouinux (Le 23/03/2014, à 15:30)
Hors ligne
#5 Le 15/03/2014, à 20:32
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
Effectivement l'ip est changent le port de connection n'est jamais le même je me retrouve donc avec des listes de doublon et dans le cas d'un joueur nomade ça vas poser des problèmes.
Je me contenterais donc du nom seul .
Et j'accepterais volontiers une explication si tu as le temps.
Merci pour ton aide et ta réactivité
Hors ligne
#6 Le 15/03/2014, à 20:44
- pingouinux
Re : récupérer les noms des connectés depuis un fichier log
Explications :
La boucle
while read user ip
do
done < <(sed .....)
lit la sortie de la commande
sed -rn "s/^\s*Info: UniverseServer: Client\s*'(.*)'.*(\([^)]+\))\s*connected.*$/\1 \2/p" MonFichierLog | sort -u
qui recherche user+ip pour toutes les connexions, suivi d'un tri pour éliminer les doublons.
On ne liste un couple user+ip que si le nombre de connexions est supérieur au nombre de déconnexions.
Peux-tu donner un exemple de ce que tu voudrais pour lister les IP (petit fichier MonFichierLog + résultat souhaité) ?
Hors ligne
#7 Le 15/03/2014, à 21:05
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
merci pour la petite explication.
en fait lors d'une connexion suivis de la déconnexion l'ip ne change pas mais lors d'une connexion suivante le port change je me retrouve donc avec
$ service monservice .players
Meatliver (80.185.xxx.xx:162)
Meatliver (80.185.xxx.xx:165)
Meatliver (80.185.xxx.xx:52058)
Meatliver (80.185.xxx.xx:52078)
Meatliver (80.185.xxx.xx:52150)
donc peut être filtré l'ip et stopper le filtre au double point ":"
par contre dans le cas ou le serveur n'est pas redémarrer depuis longtemps et ou un utilisateur se connecte depuis un autre endroit l'ip vas aussi changer et il me semble que sa serais bien plus compliqué de ne prendre en conte que la dernière ip trouvé pour l'utilisateur.
donc ne te casse pas la tête trop longtemps sur le dernier cas qui est exceptionnelle vue que le serveur fais un reboot auto tout les 2 jours
plus explicite sans les doublons et sans le port de connexion:
$ service monservice .players
Meatliver (80.185.xxx.xx)
par contre si j'envisage de faire un teste : si il n'y as pas d'utilisateur de connecté retourné un message, la je bloque car la boucle s'exécute surement toujours une dernière fois et retourne donc toujours en dernier une valeur vide pour user
if [ $user = "" ]; then
echo -e "mon message"
fi
Dernière modification par Hazender (Le 15/03/2014, à 21:08)
Hors ligne
#8 Le 15/03/2014, à 21:10
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
je suis désolé je débute et j'ai l'impression que tu fais tout pour moi
Hors ligne
#9 Le 15/03/2014, à 21:32
- pingouinux
Re : récupérer les noms des connectés depuis un fichier log
Je ne peux tester que si tu me donnes les lignes complètes de MonFichierLog.
Pour ne pas tenir compte du n° de port :
.players () {
n=0
while read user ip
do
n_connect=$(grep -c "\s*'$user'.*\bconnected" MonFichierLog)
n_disconn=$(grep -c "\s*'$user'.*\bdisconnected" MonFichierLog)
(( n_connect>n_disconn )) && { echo "$user $ip"; ((n++)); }
done < <(sed -rn "s/^\s*Info: UniverseServer: Client\s*'(.*)'.*(\([^):]+):.+\)\s*connected.*$/\1 \2)/p" MonFichierLog|sort -u)
((n)) || echo "mon message"
}
La boucle ne s'exécute que s'il y a des utilisateurs.
Hors ligne
#10 Le 15/03/2014, à 21:44
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
voila une partie du .log
Warn: UniverseServer: Logged in account as player Meatliver
Info: UniverseServer: Loading ship world received from client <User: Meatliver>
Warn: Recovering SimpleDatabase at device: <unnamed temp file>
Warn: Recovery finished
Info: UniverseServer: Client 'Meatliver' <1> (80.185.187.56:52078) connected
Info: UniverseServer: Loading world db for world alpha:-99365234:73205574:-8762603:1
Info: UniverseServer: Shutting down world alpha:-99365234:73205574:-8762603:1 due to inactivity
Info: accept from 89.156.40.21:60944 (9)
Info: UniverseServer: Connection received from: 89.156.40.21:60944
Info: UniverseServer: client connection made from 89.156.40.21:60944
Info: UniverseServer: Assets digest check is disabled during client connect
Info: UniverseServer: Sending Handshake Challenge
Warn: UniverseServer: Logged in account as player Ducknerfer
Info: UniverseServer: Client 'Ducknerfer' <2> (89.156.40.21:60944) connected
Info: UniverseServer: Loading world db for world alpha:1997497:-62498552:3147554:7:1
Info: UniverseServer: Shutting down ship world for client 'Meatliver' <1> (80.185.187.56:52078)
Info: UniverseServer: Client 'Meatliver' <1> (80.185.187.56:52078) disconnected
Info: closing 80.185.187.56:52078 (12)
Info: NetSocket read loop shut down: Connection reset by peer 80.185.187.56:52078 (0)
Info: accept from 80.185.187.56:52150 (14)
Info: UniverseServer: Connection received from: 80.185.187.56:52150
Info: UniverseServer: client connection made from 80.185.187.56:52150
Info: UniverseServer: Assets digest check is disabled during client connect
Info: UniverseServer: Sending Handshake Challenge
Warn: UniverseServer: Logged in account as player Meatliver
Info: UniverseServer: Loading ship world received from client <User: Meatliver>
Warn: Recovering SimpleDatabase at device: <unnamed temp file>
Warn: Recovery finished
Info: UniverseServer: Client 'Meatliver' <1> (80.185.187.56:52150) connected
Info: UniverseServer: Loading world db for world alpha:-99365234:73205574:-8762603:1
Info: UniverseServer: Shutting down world alpha:1997497:-62498552:3147554:7:1 due to inactivity
Info: UniverseServer: Shutting down world alpha:-99365234:73205574:-8762603:1 due to inactivity
Info: UniverseServer: Loading world db for world alpha:1997497:-62498552:3147554:7:1
Info: UniverseServer: Shutting down ship world for client 'Ducknerfer' <2> (89.156.40.21:60944)
Info: UniverseServer: Client 'Ducknerfer' <2> (89.156.40.21:60944) disconnected
Info: closing 89.156.40.21:60944 (9)
Info: NetSocket read loop shut down: Connection reset by peer 89.156.40.21:60944 (0)
Info: UniverseServer: Shutting down world alpha:1997497:-62498552:3147554:7:1 due to inactivity
Info: accept from 109.130.68.238:52210 (12)
Info: UniverseServer: Connection received from: 109.130.68.238:52210
Info: UniverseServer: client connection made from 109.130.68.238:52210
Info: UniverseServer: Assets digest check is disabled during client connect
Info: UniverseServer: Sending Handshake Challenge
Warn: UniverseServer: Logged in account as player Bot Ato
Info: UniverseServer: Loading ship world received from client <User: Bot Ato>
Warn: Recovering SimpleDatabase at device: <unnamed temp file>
Warn: Recovery finished
Info: UniverseServer: Client 'Bot Ato' <3> (109.130.68.238:52210) connected
Info: UniverseServer: Loading world db for world alpha:1997497:-62498552:3147554:7:1
Info: UniverseServer: Shutting down ship world for client 'Meatliver' <1> (80.185.187.56:52150)
Info: UniverseServer: Client 'Meatliver' <1> (80.185.187.56:52150) disconnected
Info: closing 80.185.187.56:52150 (14)
Info: NetSocket read loop shut down: Connection reset by peer 80.185.187.56:52150 (0)
Info: UniverseServer: Shutting down world alpha:1997497:-62498552:3147554:7:1 due to inactivity
Info: UniverseServer: Loading world db for world alpha:1997497:-62498552:3147554:7:1
Info: accept from 80.185.187.56:52720 (9)
Info: UniverseServer: Connection received from: 80.185.187.56:52720
Info: UniverseServer: client connection made from 80.185.187.56:52720
Info: UniverseServer: Assets digest check is disabled during client connect
Info: UniverseServer: Sending Handshake Challenge
Warn: UniverseServer: Logged in account as player Haz
Info: UniverseServer: Client 'Haz' <1> (80.185.187.56:52720) connected
Info: <Bot Ato> parle dans le chat
Info: UniverseServer: Shutting down world alpha:1997497:-62498552:3147554:7:1 due to inactivity
Info: UniverseServer: Loading world db for world alpha:1997497:-62498552:3147554:7:1
Info: UniverseServer: Shutting down world alpha:1997497:-62498552:3147554:7:1 due to inactivity
Info: UniverseServer: Client 'Bot Ato' <3> (109.130.68.238:52210) disconnected
Info: UniverseServer: Client 'Bot Ato' <3> (109.130.68.235:52210) connected
avec a la fin un utilisateur qui change d'ip entre deux connexion
Hors ligne
#11 Le 15/03/2014, à 21:52
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
tien je viens de remarqué j'ai un utilisateur avec un nom ou ou il y a des espaces il est invisible pour le code
Hors ligne
#12 Le 15/03/2014, à 22:09
- pingouinux
Re : récupérer les noms des connectés depuis un fichier log
je viens de remarqué j'ai un utilisateur avec un nom ou ou il y a des espaces il est invisible pour le code
Ce n'était pas prévu, mais c'est corrigé.
fic=MonFichierLog
.players () {
n=0
while IFS=, read user ip
do
n_connect=$(grep -c "\s*'$user'.*($ip:.\+)\s*connected" "$fic")
n_disconn=$(grep -c "\s*'$user'.*($ip:.\+)\s*disconnected" "$fic")
(( n_connect>n_disconn )) && { echo "$user ($ip)"; ((n++)); }
done < <(sed -rn "s/^\s*Info: UniverseServer: Client\s*'(.*)'.*\(([^):]+):.+\)\s*connected.*$/\1,\2/p" "$fic"|sort -u)
((n)) || echo "mon message"
}
Ajouté :
Voici le résultat avec ton exemple :
Bot Ato (109.130.68.235)
Haz (80.185.187.56)
Dernière modification par pingouinux (Le 15/03/2014, à 22:12)
Hors ligne
#13 Le 15/03/2014, à 22:33
- Hazender
Re : récupérer les noms des connectés depuis un fichier log
ton code marche du tonner merci beaucoup il fais tout et même plus que se que j'espérais
Hors ligne