#1 Le 26/11/2014, à 16:56
- WizardPC
Problème de variable API VirusTotal
Hello !
Je travaille sur un petit script en shell qui fait de l'analyse de fichiers en utilisant l'API VirusTotal disponible ici : API
Mais j'ai un problème...
Je veux uploader un fichier pour analyse, donc je tape :
vt.py -f /media/disk/fichier.pdf
ça me donne en résultat
Looking for:
media/disk/fichier.pdf
Scanned on :
2014-11-26 10:45:30
Detections:
0/56 Positives/Total
Results for MD5 : 01ff7b9...
Results for SHA1 : 7c5760...
Results for SHA256 : f9b1cc1...
Permanent Link : https://www.virustotal.com/file/f9b1cc1...
Bon vu que j'ai plusieurs fichiers je peux faire ça :
vt.py -f /media/disk/fichier.pdf /media/disk/image.png
Et ça me donnera deux rapports comme précédemment...
Pour automatiser la tache, les chemins des fichiers se retrouvent dans une variable
upload="/media/disk/fichier.pdf /media/disk/image.png"
vt.py -f $upload
Maintenant je veux gérer le cas ou il y a un espace dans un nom de fichier !
vt.py -f "/media/disk/fichier.pdf" "/media/disk/musique n18.mp3"
ça fonctionne toujours
Et voila ou je suis bloqué...
upload="\"/media/disk/fichier.pdf\" \"/media/disk/musique n3.mp3\""
echo "$upload"
"/media/disk/fichier.pdf" "/media/disk/musique n3.mp3"
vt.py -f $upload
NE FONCTIONNE PAS ! Le script de l'API me renvois les lignes ou il y a des erreurs mais en dehors de ça, je ne comprend pas pourquoi quand j'écris à la main un chemin de fichier contenant un espace, ça fonctionne ! Et quand je passe ce même chemin, dans la même syntaxe, mais par une variable ça ne fonctionne plus !
Merci de m'éclairer
Dernière modification par WizardPC (Le 26/11/2014, à 16:57)
Hors ligne
#2 Le 26/11/2014, à 17:14
- pingouinux
Re : Problème de variable API VirusTotal
Bonjour,
Essaye ceci
upload=("/media/disk/fichier.pdf" "/media/disk/musique n3.mp3")
vt.py -f "${upload[@]}"
Hors ligne
#3 Le 27/11/2014, à 09:27
- WizardPC
Re : Problème de variable API VirusTotal
ça fonctionne !!
Tu peux m’expliquer la syntaxe ? ça fonctionne peut importe le nombre de fichier ?
edit : ça à l'air de fonctionner, j'ai modifier les " par des ' si jamais il y a des noms de répertoire bizarre
upload=('/media/disk/1.png' '/media/disk/report v1.pdf' '/media/disk/$32/a b c.txt')
Dernière modification par WizardPC (Le 27/11/2014, à 09:47)
Hors ligne
#4 Le 27/11/2014, à 10:03
- pingouinux
Re : Problème de variable API VirusTotal
Tu peux m’expliquer la syntaxe ? ça fonctionne peut importe le nombre de fichier ?
Tu peux regarder la documentation sur les tableaux en bash : man bash, rubrique Arrays (en version anglaise)
Tu peux mettre plus de 2 fichiers, comme par exemple :
upload=(/media/disk/*.{pdf,mp3})
Hors ligne
#5 Le 27/11/2014, à 10:27
- WizardPC
Re : Problème de variable API VirusTotal
Ok merci
Par contre j'ai encore un autre problème, j'aurais peut être du le dire dès le début vu que ça à l'air d'être le même genre de soucis..
J'ai un fichier "upload.txt" qui contient les chemins de fichiers à mettre en ligne :
cat upload.txt
'/media/disk/1.png' '/media/disk/report v1.pdf' '/media/disk/$32/a b c.txt'
Du coup je voulais passer ça dans la variable "upload" et faire comme tu m'as montré mais ça pas l'air de fonctionner...
J'ai essayé :
upload=(cat upload.txt)
upload=($(cat upload.txt))
Mais une fois que je lance la commande
vt.py -f "${upload[@]}"
ça ne fonctionne pas.. Du coup je pense que j'arrive pas à bien "créer" la variable upload à partir du fichier texte. Une idée ?
Merci
Hors ligne
#6 Le 27/11/2014, à 10:56
- pingouinux
Re : Problème de variable API VirusTotal
Dans ce cas, ne mets qu'un seul fichier par ligne dans upload.txt.
upload=();n=0;while read fic;do upload[$((n++))]=$fic;done <upload.txt
Hors ligne
#7 Le 27/11/2014, à 11:19
- WizardPC
Re : Problème de variable API VirusTotal
Bon je récapitule avec le cas d'un fichier sans espace dans un répertoire classique C'est censé être le cas le plus simple !
/home/test/Documents/bin/vt.py -f '/media/test/EB14-F3E9/1.png'
FONCTIONNE
upload=('/media/test/EB14-F3E9/1.png')
/home/test/Documents/bin/vt.py -f "${upload[@]}"
FONCTIONNE
tmp=$(mktemp)
echo "'/media/test/EB14-F3E9/1.png'" > $tmp
cat $tmp
'/media/test/EB14-F3E9/1.png'
upload=();n=0;while read fic;do upload[$((n++))]=$fic;done <$tmp
echo "${upload[@]}"
'/media/test/EB14-F3E9/1.png'
/home/test/Documents/bin/vt.py -f "${upload[@]}"
NE FONCTIONNE PAS
ça me désespère
Dernière modification par WizardPC (Le 27/11/2014, à 11:19)
Hors ligne
#8 Le 27/11/2014, à 11:23
- pingouinux
Re : Problème de variable API VirusTotal
Essaye comme ceci
echo "/media/test/EB14-F3E9/1.png" > $tmp
ou
echo '/media/test/EB14-F3E9/1.png' > $tmp
Hors ligne
#9 Le 27/11/2014, à 11:29
- WizardPC
Re : Problème de variable API VirusTotal
Alors ça avance
cat $tmp
/media/test/EB14-F3E9/report v1.pdf
/media/test/EB14-F3E9/1.png
/media/test/EB14-F3E9/$32/a b c.txt
upload=();n=0;while read fic;do upload[$((n++))]=$fic;done <$tmp
echo "${upload[@]}"
/media/test/EB14-F3E9/report v1.pdf /media/test/EB14-F3E9/1.png /media/test/EB14-F3E9/$32/a b c.txt
/home/test/Documents/bin/vt.py -f "${upload[@]}"
Miracle ça fonctionne !!! Il me reste plus qu'à adapter cette façon de faire à mon script
Dernière modification par WizardPC (Le 27/11/2014, à 11:29)
Hors ligne
#10 Le 27/11/2014, à 11:41
- pingouinux
Re : Problème de variable API VirusTotal
Pour voir le contenu du tableau, il vaut mieux faire ceci :
for i in "${upload[@]}";do echo "$i";done
Hors ligne
#11 Le 27/11/2014, à 13:52
- WizardPC
Re : Problème de variable API VirusTotal
D'accord.
Merci @pingouinux pour ton aide, maintenant ça fonctionne comme il le faut
Hors ligne