Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
831 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Extraire IP d'un texte sous bash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraire IP d'un texte sous bash

n°726243
bisol
Posté le 07-09-2005 à 09:34:17  profilanswer
 

Hello à tous.
 
Je lance une commande sur mon Linux qui est :  
cat /var/log/messages | grep -i "Failed Password"  
 
Ceci me donnera une ligne du style :
Sep  6 23:15:57 serveur sshd[8591]: Failed password for root from xxx.xxx.xxx.xxx port xxxxx ssh2
 
Mon problème est que j'aimerai extraire "xxx.xxx.xxx.xxx" de cette chaîne.
 
Je me suis déjà heurté à 'sed' et 'awk' mais sans succès ;(.
 
J'ai également recherché sur le forum mais je n'ai rien trouvé.  
 
Merci d'avance pour votre aide


Message édité par bisol le 07-09-2005 à 09:49:10
mood
Publicité
Posté le 07-09-2005 à 09:34:17  profilanswer
 

n°726247
Jerem22
Posté le 07-09-2005 à 09:59:33  profilanswer
 

Salut, je connais rien à awk, mais en cherchant un peu j'ai appris que :
 
a="Sep  6 23:15:57 serveur sshd[8591]: Failed password for root from xxx.xxx.xxx.xxx port xxxxx ssh2"
echo $a |  awk '{print $11}'
 
devrait marcher car awk gardera le 11ième champ de la ligne en question (ça marche j'ai testé).
 
Donc quelque chose comme cat /var/log/messages | grep -i "Failed Password" |  awk '{print $11}' devrait fonctionner.
 
Après c'est peut être moche comme méthode (notamment si le nombre de champs varient...)
 
Jérem

n°726250
bisol
Posté le 07-09-2005 à 10:07:30  profilanswer
 

Effectivement le nombre de champs varient car je peux avoir une variante (ta technique marche pour mon exemple). La variante :
Failed password for invalid user user from 221.12.29.103 port 53583 ssh2
 
Je vais faire une solution pas très belle avec ca temporairement ;)
 
Merci

n°726270
jlighty
Posté le 07-09-2005 à 11:34:35  profilanswer
 

une regexp devrait faire l'affaire :
s/\([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)/\1/
en gros on cherche un ou plusieurs chiffres suivie d'un point, on sélectionne jusqu'à ce que l'on trouve un espace.
Je ne suis pas sûr que ça marche à tester avec sed.


Message édité par jlighty le 07-09-2005 à 11:51:39
n°726312
bisol
Posté le 07-09-2005 à 13:48:23  profilanswer
 

cat /var/log/messages | grep -i "Failed password for root" | sed s/\{[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)/\1/
 
Ca me retourne  
Sep  6 23:15:57 serveur sshd[8591]: Failed password for root from 221.12.29.103 port 53958 ssh2
 
Alors que ca dervait que prendre l'IP ;/

n°726368
jlighty
Posté le 07-09-2005 à 14:52:33  profilanswer
 

la nouvelle version qui marche :
 sed "s/..* \([0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\)..*/\1/"
avec ça, tu auras directement l'adresse IP

n°726378
Pillow
'cos the trees won't talk
Posté le 07-09-2005 à 15:11:42  profilanswer
 

Dans une regex, '{1,}' s'écrit aussi '+'.
 
'*' veut dire "0 ou plus", donc '..*'  s'écrit aussi '.+'. Mais ici, je ne vois pas l'intéret de matcher au moins un caractère avant et après l'ip ?
 
donc, version raccourcie :

sed 's/.* \([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/'


n°726384
jlighty
Posté le 07-09-2005 à 15:20:35  profilanswer
 

Ne connaissant que les bases des regex j'ai jamais utilisé les +

Citation :

Mais ici, je ne vois pas l'intéret de matcher au moins un caractère avant et après l'ip ?


erreur de ma part, surtout si l'IP est placé en fin de chaine ça peut être problématique.
Sinon il ne faudra pas oublier d' "échapper"  les +,(,1,{

n°726387
Pillow
'cos the trees won't talk
Posté le 07-09-2005 à 15:24:27  profilanswer
 

jlighty a écrit :

Sinon il ne faudra pas oublier d' "échapper"  les +,(,1,{

[:pingouino]
taist  

sed 's/.* \([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/'


 
edit : bug spotted :D  
 
sed 's/.* \([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/'


Message édité par Pillow le 07-09-2005 à 15:25:00

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Extraire IP d'un texte sous bash

 

Sujets relatifs
[BASH] Question sur valeur de retourCherche editeur texte c++
Aide au scripting bashExplications sur cette commande bash ":(){:|:&};:"
[débutant] problème script bashsupprimer un ensemble de caractères d'un texte [résolu]
Scripts Bash - Aide - Comment cacher une fenetre ?PERL + bash: gestion des espaces vides dans les noms de fichier
problème au démarrage + editeur texte(bash) Extraire le dernier champ d'une ligne
Plus de sujets relatifs à : Extraire IP d'un texte sous bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR