Script (message d'erreur)

Résolu/Fermé
KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022 - 20 déc. 2017 à 18:07
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 26 déc. 2017 à 14:03
Bonjour,

j'ai un script sur lequel je travailles depuis mais sans jusqu'a présent avoir trouvé une solution.
il a pour principal but d'analyser les logs des users qui se sont connectés à un serveur linux et de ressortir les robots qui se sont logés comme étant des users ( Partant du principe que Si en 1 S on a : user loged in+user modified password + user logged off = alors il s'agit d'un robot (bot) et je dois dans mon script listés tous ceux-ci.Cnf : https://pastebin.com/Fy9pgHa8

Mon probleme c'est que toujours dans mes recherches je me suis appercu que une personne avait déjà crée un script à ce sujet dont je veux m'en inspirer ; Mais quand j'executes le script https://pastebin.com/7V6Msxbp que voici en question j'ai des messages d'erreur suivant "

AvenirTec@Gilles-Etame /cygdrive/c/Users/AvenirTec/Desktop
$ ./bot.sh
./bot.sh: ligne 15: erreur de syntaxe près du symbole inattendu « $'\r' »
'/bot.sh: ligne 15: ` ((rnum++)) "

Rassurez vous qu"en passant par le terminal de Centos ou meme celui de l'emulateur Cygwig j'ai le meme message d'erreur.
Je ne suis qu'un débutant sur Unix donc aidez moi svp!!!!


Cdlt;




2 réponses

Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
25 déc. 2017 à 11:12
Saloute,

Aller, c'est nowel :


#!/bin/bash

if [ $# -eq 0 ]
then
echo "Vous devez indiquer un fichier à parser : PARSER.bash file.log"
exit
fi

if ! [ -f $1 ]
then
echo "le fichier $(pwd)/$1 n'existe pas."
exit
else
FPATH="$(pwd)/$1"
FNAME=$1
fi

touch tmpuserlist
RNUM=1
while read LINE
do
if [[ $LINE =~ "user logged in" ]]
then
USER=$(head -n $RNUM $FNAME| tail -n1 | awk -F '|' '{print $3}')
TSTAMP=$(head -n $RNUM $FNAME | tail -n1 | awk -F '|' '{print $1}')
NEXTLINE=$(head -n $((RNUM + 1)) $FNAME | tail -n1)
NEXTLINE2=$(head -n $((RNUM + 2)) $FNAME | tail -n1)

if [[ "$NEXTLINE" == *"$USER"* && "$NEXTLINE" == *"user changed password"* && "$NEXTLINE" == *"$TSTAMP"* && "$NEXTLINE2" == *"$USER"* && "$NEXTLINE2" == *"user logged off"* && "$NEXTLINE2" == *"$TSTAMP"* ]]
then
echo $USER >> tmpuserlist
fi
fi
((RNUM++))
done < $FNAME
cat tmpuserlist | sort | uniq
rm -f tmpuserlist


En revanche, la connexion, changement de mdp etc a l'air bien cyclique. Pas sure que ce script fonctionne si plusieurs utilisateurs ce connecte en méme temps, ce deconnecte a des heures differentes etc... (nextline & nextline2) ça peut vite faire peu :)

Joyeux Noël à tous, des bisous.
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
25 déc. 2017 à 11:14
Edit : il faudrait mettre tous les FNAME entre guillemet au cas ou celui ci contienne des espaces
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
25 déc. 2017 à 11:15
Tu as des erreurs car tu cherches a executer un script shell en bash.
SHELL != BASH
0
KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022 5
25 déc. 2017 à 13:05
@Exileur, je t'assures que c'est l'un des meilleurs cadeaux que j'ai recu en ce jour.
Je te dis infiniment merci pour ta prompte réaction.Ton programme fonctionne parfaitement je
l'ai juste amélioré dans la forme.
Merci encore et surtout Merci!!!!!!!
Ca me plairait vraimment d'echanger avec toi (Biensur si c'est possible en ib pour certains projets);

Cdlt.
0
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 150
25 déc. 2017 à 13:12
Hesite pas a re-poster sur CCM si tu as d'autre questions.
Je garde un oeil sur le forum linux ;)

Eventuellement tu peux nous montrer le code que tu as en finalité ? (avec tes modifs)
A plus
0
Utilisateur anonyme > Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022
25 déc. 2017 à 19:54
SHELL != BASH ah bon !? bash n'est pas un shell ?
par contre, parfois
/bin/sh != /bin/bash
.
0
Utilisateur anonyme
20 déc. 2017 à 18:14
salut,

tu as écrit ton script sur W$ ?
-1
KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022 5
20 déc. 2017 à 18:19
il est vrai qu'a la base il etait en fichier .txt mais rassurez vous que je l'ai converti déjà pour en script linux par la commande Dos2Unix
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022
20 déc. 2017 à 19:25
Salut,
mais rassurez vous que je l'ai converti déjà pour en script linux par la commande Dos2Unix
Pourtant l'erreur (
ligne 15: erreur de syntaxe près du symbole inattendu « $'\r' » 
) indique le contraire ;-(

Affiche-nous ici, entre les balises <code> </code> la sortie de
cat -A bot.sh
s'il te plaît, merci.
0
KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022 5
20 déc. 2017 à 22:02
Merci pour ta prompte réaction; ci-joints la sortie de la sortie de "cat -A bot.sh"

AvenirTec@Gilles-Etame /cygdrive/c/Users/AvenirTec/Desktop
$ cat -t bot.sh
$ cat file.log ^M
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| - ^M
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed pass word| -^M
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -^M
Mon, 22 Aug 2016 13:15:42 +0200|178.57.66.225|faaaaaa11111| - |user logged in| - ^M
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged in| - ^M
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user changed pass word| -^M
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged off| -^M
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -^ M
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -^ M
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed passw ord| -^M
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| - ^M
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged in| -^M
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed passwor d| -^M
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed profile | -^M
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged off| -^M
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged in| -^M
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user changed passwo rd| -^M
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged off| -^ M
Mon, 22 Aug 2016 13:20:42 +0200|178.57.67.225|faaaa0a1111| - |user logged in| -^ M
$ cat parser ^M
#!/bin/bash^M
fname=$1^M
rnum=1^M
while read line^M
do^M
if [[ $line =~ "user logged in" ]]; then^M
user=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $3}'`^M
tstamp=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $1}'`^M
nextline=`head -n $[$rnum+1] $fname | tail -n1`^M
nextline2=`head -n $[$rnum+2] $fname | tail -n1`^M
if [[ $nextline =~ $user && $nextline =~ "user changed password" && $nex tline =~ "$tstamp" && $nextline2 =~ $user && $nextline2 =~ "user logged off" && $nextline2 =~ "$tstamp" ]]; then^M
echo $user >> tmpuserlist ^M
fi^M
fi^M
((rnum++))^M
done <$fname^M
cat tmpuserlist | sort | uniq^M
rm -f tmpuserlist^M
./parser file.log ^M
erdsfsdfsdf^M
fxsciaqulmlk^M
fxsciulmla^M
terdsfsdfsdf^M
$
0
KEGA Messages postés 102 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 11 août 2022 5
20 déc. 2017 à 23:25
SVP Que quelqu'un essaye aussi de me compiler voir executer le programme en question que voici :

$ cat file.log
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed password| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -
Mon, 22 Aug 2016 13:15:42 +0200|178.57.66.225|faaaaaa11111| - |user logged in| -
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user changed password| -
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged off| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed password| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged in| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed password| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed profile| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged off| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged in| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user changed password| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged off| -
Mon, 22 Aug 2016 13:20:42 +0200|178.57.67.225|faaaa0a1111| - |user logged in| -
$ cat parser
#!/bin/bash
fname=$1
rnum=1
while read line
do
if [[ $line =~ "user logged in" ]]; then
user=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $3}'`
tstamp=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $1}'`
nextline=`head -n $[$rnum+1] $fname | tail -n1`
nextline2=`head -n $[$rnum+2] $fname | tail -n1`
if [[ $nextline =~ $user && $nextline =~ "user changed password" && $nextline =~ "$tstamp" && $nextline2 =~ $user && $nextline2 =~ "user logged off" && $nextline2 =~ "$tstamp" ]]; then
echo $user >> tmpuserlist
fi
fi
((rnum++))
done <$fname
cat tmpuserlist | sort | uniq
rm -f tmpuserlist
./parser file.log
erdsfsdfsdf
fxsciaqulmlk
fxsciulmla
terdsfsdfsdf
$




Moi je n'y arrive pas!!
0
Utilisateur anonyme
21 déc. 2017 à 00:01
tant que tu n'utiliseras pas les balises CODES (le bouton
<>
) en séparant les différents éléments (affichage des données, contenu du script, exécution...) je n'y toucherai pas.

« Moi je n'y arrive pas!! »
que se passe-t-il ? un message d'erreur ?

PS : t'as appris à coder quand, il y a plus de vingt ans ?
il y a longtemps qu'on n'utilise plus
` `
, et
$[ ]
.
0