Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/10/2015, à 09:02

maya-974

Décodage base64 dans une commande vi ou sed

Bonjour,
je dois analyser et formater des traces de messages dont certaines contiennent du texte encodé en base64.
Compte tenu du volume de traces à traiter, j'ai réalisé un script bash (sûrement pas le plus performant mais au moins, je comprends ce que je fais).
Sauf que je ne parviens pas à travers soit une commande vi -c "%s/pattern encodé en base64/équivalent décodé avec base64 -d/g" soit son équivalent sous sed -e "s/pattern encodé en base64/équivalent décodé avec base64 -d/g" à le faire.
Je donne un exemple de trace à traiter :
Jan 23 15:32:00 dsf1fe postfix/cleanup[9920]: 36F342F06B: warning: header Subject: =?utf-8?B?Tm91dmVhdXggbG9nbyBldCBzaWduYXR1cmUsIHZvdHJlIGF2aXMgbm91cyBpbnTDqXJlc3NlICE=?= from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Merci par avance de votre aide

Hors ligne

#2 Le 14/10/2015, à 09:17

Postmortem

Re : Décodage base64 dans une commande vi ou sed

Salut,

Un début de réponse :

sed -e 's/la chaine en base 64/'"$(base -d <<< 'la chaine en base 64')"'/g' fichier

Par contre, je sais pas comment on repère ce qui est en base64 dans le fichier... Ou alors, tu as une liste prédéfinie de ce qu'il faut décoder ??


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 14/10/2015, à 10:23

maya-974

Re : Décodage base64 dans une commande vi ou sed

Merci pour ta réponse.
J'apporte quelques précisions : je repère le texte en base 64 à travers des balises (=?utf-8?B? pour le début et ?= pour la fin).
Ainsi, je souhaite substituer ce qui est entre par son équivalent décodé.
Avec ta proposition, ça donnerait :

sed -e "s/=?utf-8?B?\(.*\)?=/`'$(base64 -d <<< \1)'`/g" fichier

J'ai essayé mais le sous-groupe \1 ne semble pas être interprété.
Je poursuis.

Hors ligne

#4 Le 14/10/2015, à 11:05

credenhill

Re : Décodage base64 dans une commande vi ou sed

hello
en nettoyant début et fin du champ base64

$ awk --posix '{gsub("^.{10}|.{6}$", "", $10); "echo " $10 "| base64 -d" | getline $10 ; $10="\"" $10 "\"";print} ' fichier
Jan 23 15:32:00 dsf1fe postfix/cleanup[9920]: 36F342F06B: warning: header Subject: "Nouveaux logo et signature, votre avis nous intéresse" from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>

Hors ligne

#5 Le 14/10/2015, à 11:34

maya-974

Re : Décodage base64 dans une commande vi ou sed

Bonjour,
merci pour cette nouvelle proposition.
Ne connaissant pas trop awk, je suis aller voir la manpage et certains pour comprendre la syntaxe car à l'exécution, j'ai un retour d'erreur : --posix not an option
Au final, je n'ai pas trouvé.
Si tu pouvais m'éclairer.
Par avance, je te remercie

Hors ligne

#6 Le 14/10/2015, à 12:05

credenhill

Re : Décodage base64 dans une commande vi ou sed

essayer gawk à la place de awk

Hors ligne

#7 Le 15/10/2015, à 09:03

maya-974

Re : Décodage base64 dans une commande vi ou sed

Bonjour,
je viens de résoudre le problème avec awk.
Ma machine utilisait par défaut mawk (pour le savoir, taper la ligne de commandes suivante)

update-alternatives --display awk

J'ai donc tout simplement fait la manip suivante :

sudo apt-get update
sudo apt-get install gawk

puis

sudo update-alternatives --config awk

et ai choisi l'option par défaut.
J'ai donc pu tester la ligne de commandes proposée mais en vain.
Pourrais-tu m'expliquer rapidement ce que fait la commande au juste pour que je puisse le cas échéant l'adapter ?
Merci par avance

Hors ligne

#8 Le 15/10/2015, à 09:18

credenhill

Re : Décodage base64 dans une commande vi ou sed

gsub("^.{10}|.{6}$", "", $10)    supprime les 10 premiers et 6 derniers car. du champ 10, celui en base64 (en testant  jusqu'à ce que base64 n'affiche plus d'erreur)
"echo " $10 "| base64 -d" | getline $10          envoie le contenu du champ 10 dans base64 et le relit dans lui-même
$10="\"" $10 "\""        entoure le sujet de "
print            affiche toute la ligne

Hors ligne

#9 Le 15/10/2015, à 11:30

maya-974

Re : Décodage base64 dans une commande vi ou sed

Merci pour ces précisions.
Je comprends mieux en effet l'origine de mon problème.
En fait, j'ai plusieurs contraintes.
Tout d'abord, mon fichier ne contient pas que des lignes dont une partie du texte est encodée en base 64.
Ensuite, je ne commence pas forcément pas au 10ème champ.
Je donne un exemple plus proche de ce que j'ai à traiter :

Jan 23 15:32:00 dsf1fe postfix/cleanup[9920]: 36F342F06B: warning: header Subject: =?utf-8?B?Tm91dmVhdXggbG9nbyBldCBzaWduYXR1cmUsIHZvdHJlIGF2aXMgbm91cyBpbnTDqXJlc3NlICE=?= from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Jan 24 14:30:01 dsf1fe postfix/cleanup[8856]: 34F572A16B: warning: header Subject: anniversaire de Lili from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Jan 28 04:10:27 dsf1fe postfix/cleanup[256]: 12B567F456: warning: header Subject: Re: Fwd: =?utf-8?B?Y2VjaSBlc3QgdW4gZXhlbXBsZSBpbGx1c3RyYW50Cg==?=? =?utf-8?B?bW9uIHByb2Jsw6htZQo=?= from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>

Pour m'approcher de la proposition, j'ai donc réaliser des substitutions pour en arriver à :

Jan 23 15:32:00 dsf1fe postfix/cleanup[9920]: 36F342F06B: warning: header Subject: base64Tm91dmVhdXggbG9nbyBldCBzaWduYXR1cmUsIHZvdHJlIGF2aXMgbm91cyBpbnTDqXJlc3NlICE=base64 from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Jan 24 14:30:01 dsf1fe postfix/cleanup[8856]: 34F572A16B: warning: header Subject: anniversaire de Lili from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Jan 28 04:10:27 dsf1fe postfix/cleanup[256]: 12B567F456: warning: header Subject: Re: Fwd: base64Y2VjaSBlc3QgdW4gZXhlbXBsZSBpbGx1c3RyYW50Cg==bW9uIHByb2Jsw6htZQo=base64 from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>

Je peux également tenter de supprimer les espaces entre Subject:, Re: et Fwd: de sorte que je commence bien toujours au 10ème champ sauf que je ne sais pas comment ne traiter avec awk que les lignes qui contiennent un texet encapsulé entre mes balises base64.
Merci encore par avance pour vos contributions.

Hors ligne

#10 Le 15/10/2015, à 12:18

credenhill

Re : Décodage base64 dans une commande vi ou sed

avec le 1er exemple, on teste et ne traite que les champs qui contiennent utf
mais le 2ème champ avec utf de la 3ème ligne ne passe pas

$ awk --posix '{for(n=1; n<=NF; n++)if($n ~ /utf/){gsub("^.{10}|.{6}$", "", $n); "echo " $n "| base64 -d" | getline $n} ; print} ' fichier
Jan 23 15:32:00 dsf1fe postfix/cleanup[9920]: 36F342F06B: warning: header Subject: Nouveaux logo et signature, votre avis nous intéresse from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
Jan 24 14:30:01 dsf1fe postfix/cleanup[8856]: 34F572A16B: warning: header Subject: anniversaire de Lili from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>
base64: invalid input
Jan 28 04:10:27 dsf1fe postfix/cleanup[256]: 12B567F456: warning: header Subject: Re: Fwd: ceci est un exemple illustrant mon problèm from unknown[192.168.3.2]; from=<no-reply@monorg.fr> to=<paul.martin@sonorg.fr> proto=ESMTP helo=<dasfgo2.ghj>

Hors ligne