IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Aide pour transformer une chaine avec sed


Sujet :

Linux

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut Aide pour transformer une chaine avec sed
    Bonjour à tous !

    J'aimerai utiliser sed pour changer la manière dont iptables me stocke mes logs.
    Voici un exemple de ligne dans le fichier de log:

    Oct 12 23:07:03 firewall kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=39 ID=51459 PROTO=TCP SPT=53120 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0
    J'aimerai transformer cette chaîne en quelque chose comme:
    IP_src: 10.0.0.66 IP_dest: 10.0.0.1 port: 80
    Autant, changer SRC en IP_src ne me pose pas de problème, autant virer tout ce qui ne m'intéresse pas est problématique.

    J'aimerai récupérer uniquement SRC, DST et DPT.

    Merci d'avance pour votre aide !

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    Bonjour progfou,

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/.*SRC=\([^ ]*\).*DST=\([^ ]*\).*DPT=\([^ ]*\).*/IP_src:\1 IP_dest:\2 port:\3/'
    ...
    ?

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Salut,

    Ca ne fonctionne pas... du tout ! .
    J'ai l'impression qu'il ne se passe rien...

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    ???
    Bizarre...

    donne d'autres lignes, mais a priori, en copiant plusieurs fois la même dans un fichier, et en appliquant la commande à ce fichier, pour moi ça marche...
    ?

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    OK, je sais pourquoi...
    C'est une histoire d'espaces et de \r.
    Petite question: tu peux juste expliquer en deux mots comment tu arrives à cette ligne stp ?
    Histoire que je sache la réutiliser ;-).

    Merci.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sed 's/            # substitution
    .*SRC=             # tout jusqu'à 'SRC='
    \(                 # groupe
    [^ ]*              # jusqu'au premier espace
    \)                 # fin groupe
    .*DST=\([^ ]*\)    # idem avec 'DST='
    .*DPT=\([^ ]*\)    # idem avec 'DPT='
    .*                 # le reste de la ligne
    /                  # délimiteur
    IP_src:            # substitution de 'SRC='
    \1                 # rappel du premier groupe
     IP_dest:          # substitution de 'DST='
    \2                 # rappel du deuxième groupe
     port:             # substitution de 'DPT='
    \3                 # rappel du troisième groupe
    /'                 # fin

  7. #7
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Merci beaucoup, c'est très clair !

  8. #8
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Salut,

    Une autre question: je peux très bien ne pas avoir le DPT.
    Exemple:

    Oct 13 19:50:43 dev-desktop kernel: [37818.266507] IN=eth0 OUT= MAC=00:19:b9:26:cf:23:00:13:d3:c9:d5:9d:08:00 SRC=209.85.227.18 DST=192.168.35.53 LEN=1470 TOS=0x00 PREC=0x00 TTL=64 ID=30578 DF PROTO=TCP SPT=80 DPT=37410 WINDOW=8760 RES=0x00 ACK PSH URGP=0
    Oct 13 19:50:43 dev-desktop kernel: [37818.266621] IN=eth0 OUT= MAC=00:19:b9:26:cf:23:00:13:d3:c9:d5:9d:08:00 SRC=209.85.227.18 DST=192.168.35.53 LEN=1276 TOS=0x00 PREC=0x00 TTL=64 ID=30579 DF PROTO=TCP SPT=80 DPT=37410 WINDOW=8760 RES=0x00 ACK PSH URGP=0
    Oct 13 19:50:43 dev-desktop kernel: [37818.268779] IN=eth0 OUT= MAC=00:19:b9:26:cf:23:00:13:d3:c9:d5:9d:08:00 SRC=209.85.227.18 DST=192.168.35.53 LEN=1470 TOS=0x00 PREC=0x00 TTL=64 ID=30580 DF PROTO=TCP SPT=80 DPT=37410 WINDOW=8760 RES=0x00 ACK PSH URGP=0
    Oct 13 19:50:43 dev-desktop kernel: [37818.269479] IN=eth0 OUT= MAC=00:19:b9:26:cf:23:00:13:d3:c9:d5:9d:08:00 SRC=209.85.227.18 DST=192.168.35.53 LEN=218 TOS=0x00 PREC=0x00 TTL=64 ID=30581 DF PROTO=TCP SPT=80 DPT=37410 WINDOW=8760 RES=0x00 ACK PSH URGP=0
    Oct 13 19:54:31 dev-desktop kernel: [38045.812360] IN=tun0 OUT=eth0 SRC=192.168.200.1 DST=192.168.35.144 LEN=84 TOS=0x00 PREC=0x00 TTL=62 ID=64241 PROTO=ICMP TYPE=0 CODE=0 ID=7458 SEQ=1
    Oct 13 19:54:32 dev-desktop kernel: [38046.810648] IN=tun0 OUT=eth0 SRC=192.168.200.1 DST=192.168.35.144 LEN=84 TOS=0x00 PREC=0x00 TTL=62 ID=64242 PROTO=ICMP TYPE=0 CODE=0 ID=7458 SEQ=2
    Les trois premières lignes: pas de soucis.
    La dernière, ça ne fonctionne pas.
    Il y a quoi comme solutions ? Plusieurs sed ?

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 585
    Points : 19 465
    Points
    19 465
    Par défaut
    Citation Envoyé par progfou
    Il y a quoi comme solutions ? Plusieurs sed ?
    Presque...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sed '/DPT=/b next s/.*SRC=\([^ ]*\).*DST=\([^ ]*\).*/IP_src:\1 IP_dest:\2/;
    :next s/.*SRC=\([^ ]*\).*DST=\([^ ]*\).*DPT=\([^ ]*\).*/IP_src:\1 IP_dest:\2 port:\3/
    '  fichier.in
    IP_src:209.85.227.18 IP_dest:192.168.35.53 port:37410
    IP_src:209.85.227.18 IP_dest:192.168.35.53 port:37410
    IP_src:209.85.227.18 IP_dest:192.168.35.53 port:37410
    IP_src:209.85.227.18 IP_dest:192.168.35.53 port:37410
    IP_src:192.168.200.1 IP_dest:192.168.35.144
    IP_src:192.168.200.1 IP_dest:192.168.35.144
    C'est l'équivalent d'une structure conditionnelle en sed :
    /DPT=/b next # si 'DPT=' est trouvé, on passe au label :next, sinon c'est l'expression qui suit immédiatement qui est exécutée.

    regarde ici pour une meilleure explication (en anglais malheureusement, je n'ai pas trouvé de traduction)

  10. #10
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Super ! On peut mettre des tabulations au lieu des espaces ?

Discussions similaires

  1. [XL-2010] Aide pour finaliser une rechercheV avec plusieurs valeurs
    Par roadruner dans le forum Excel
    Réponses: 3
    Dernier message: 12/07/2012, 22h42
  2. [Batch] Aide pour supprimer une chaine de caractere
    Par colapsus dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/06/2011, 19h15
  3. Besoin d'aide pour réaliser une classe avec du css
    Par Winjet dans le forum Mise en page CSS
    Réponses: 29
    Dernier message: 24/04/2009, 11h01
  4. Demande d'aide pour faire une chaine de compilation en C
    Par wahid_kw1 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 02/03/2009, 22h48
  5. Réponses: 22
    Dernier message: 20/05/2008, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo