Non, le shell est bash
Non, le shell est bash
J'ai posté une solution plus propre en BASH que je te conseillerais de tester et d'utiliser.
Sinon, pour ton souci, les 2 syntaxes suivantes sont différentes et l'une génère l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part java -jar WOF.jar < <( sleep 5 ; echo "3" ; sleep 1 ; echo "www.site0.eu" ; sleep 1 ; echo "www.modsec.com" ; sleep 1 ; echo "80" )
Code : Sélectionner tout - Visualiser dans une fenêtre à part java -jar WOF.jar <<( sleep 5 ; echo "3" ; sleep 1 ; echo "www.site0.eu" ; sleep 1 ; echo "www.modsec.com" ; sleep 1 ; echo "80" )
oui, j'ai testé ton script, mais ça ne marche pas, il me retourne directement le prompte
Le lances tu depuis un terminal ?
Il t'indique des erreurs ?
Pour ma part, je n'ai pas testé avec le vrai jar, mais juste avec la partie qui demande les informations et ceci depuis un terminal et chez moi, cela fonctionne.
Ensuite, il y a le wait qui attend que le process java soit fini sinon, lorsque le script bash rend la main, le process java serait "killé".
oui, je le lance depuis le terminal
il y a pas d'erreur, mais il me rend la main directement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ ./script.bash $
Et que donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part bash -x ./script.bash
ça donne ça
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 $ bash -x ./script.bash + exec + Reg='Choose Interface$' + java -jar sniffer.jar + true + read -d : -u 3 r + [[ /usr/java/packages/lib/amd64 =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /usr/lib/x86_64-linux-gnu/jni =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /lib/x86_64-linux-gnu =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /usr/lib/x86_64-linux-gnu =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /usr/lib/jni =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /lib =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ /usr/lib Loading Status =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ MOVING ahead without loading any rules! Loading Status =~ Choose Interface$ ]] + true + read -d : -u 3 r + [[ No "*.conf" file found under "/rules/" directory) Choose Interface =~ Choose Interface$ ]] + break + echo 3 + Reg='LOCK PROFILE \(Website\) FOR PASSIVE ENGINE' + true + read -d : -u 3 r + [[ LOCK PROFILE (Website) FOR PASSIVE ENGINE =~ LOCK PROFILE \(Website\) FOR PASSIVE ENGINE ]] + break + echo www.site0.eu + Reg='ENTER WAF-BOX URL$' + true + read -d : -u 3 r + [[ ENTER WAF-BOX URL =~ ENTER WAF-BOX URL$ ]] + break + echo www.modsec.com + Reg='ENTER PORT NO$' + true + read -d : -u 3 r + [[ ENTER PORT NO =~ ENTER PORT NO$ ]] + break + echo 80 + exec + wait
D'après le code que tu donnes, il semble créer 2 BufferedReader (b1234 et b123 (jolis noms de variables, soit dit en passant!)).
Le 1er lit une seule ligne, tandis que le 2ème lit les 3 suivantes.
J'imagine (avis des spécialistes java?) que c'est à cause de la création de ces 2 BufferedReaders que ne marche pas la solution proposée par al1_24 :
Je ne vois d'ailleurs aucune raison pour créer ces 2 BufferedReader?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 java -jar file.jar << EoF val1 val2 val3 val4 EoF
(peut-être que l'historique du projet nous montrerait qu'il n'y en avait qu'un au départ b123 et que quelqu'un a ajouté l'autre...)
Bref, si on peut changer le source, en supprimant la ligne de création de b123 et en remplaçant les références à b123 par b1234, il est possible que la solution de al1_24 marche!
Sinon, sans changer le java, il est possible aussi que fonctionne la suppression de tous les sleep sauf le 2ème (à tester):
Si je devais essayer, je commencerais par supprimer le 4ème sleep, puis le 3ème, puis le 1er, pour ne conserver que le 2ème... (à tester)
Code : Sélectionner tout - Visualiser dans une fenêtre à part java -jar WOF.jar < <(echo "3" ; sleep 1 ; echo "www.site0.eu" ; echo "www.modsec.com" ; echo "80" )
Etrange, il passe bien les données comme il faut, mais on a l'impression que le wait ne patiente pas.
Ou alors, il y a une erreur qui arrête le java, d'ailleurs, on voit qu'il ne trouve pas *.conf pour les rules.
Peut-être remplacer wait par fg.
PS: je viens de voir qu'il y a un bug proche de ce sujet en bash version 4.2.0 ...
Pour moi, je pense qu'il en faut au moins 2, puisque 2 BufferReader et donc 2 init
En plus, pour faire simple, le newline est en début de ligne dans ces output, donc la lecture via read n'est pas basique.
En gros, je trouve que c'est développé avec les pieds, mais c'est juste mon avis
j'ai remplacé "wait" par "fg" mais il y a une erreur
fg: pas de contrôle de tache
en fait, j'ai utilisé la première solution (la moins propre) dans un script
mais ça ne marche pas, je sais pas pourquoi ?
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 #!/bin/bash # Argument -i $interface, -s $siteweb, -w wafbox -p $port usage() { cat << EOF usage: $0 options ce script permet de lancer le sniffer OPTIONS: --help help --interface numero de l'interface d'écoute --siteweb l'address host du serveur web à protéger --wafbox l'address host du machine Modsecurity --port le numero du port EOF } interface= siteweb= wafbox= port= while getopts "pwsih-:" opt ; do if [ $opt = "-" ] ; then case $OPTARG in help ) opt="h" ;; interface ) opt="i" ;; siteweb ) opt="s" ;; wafbox ) opt="w" ;; port ) opt="p" ;; esac fi case $opt in h ) usage exit ;; i ) interface=$OPTARG ;; s ) siteweb=$OPTARG ;; w ) wafbox=$OPTARG ;; p ) port=$OPTARG ;; esac done java -jar WOF.jar < <( sleep 5 ; echo $interface ; sleep 1 ; echo $siteweb ; sleep 1 ; echo $wafbox ; sleep 1 ; echo $port )
Et si tu faisais un affichage de tes variables pour voir si elles sont correctes, ou lancé le script en mode debug pour voir le déroulement...
Pour moi, la version "propre" devrait fonctionner au même titre que la version avec les sleep que tu utilises.
As-tu aussi essayé de lancer le jar manuellement pour lui passer les valeurs que tu donnes à tes variables, pour voir si déjà cela fonctionne ?
Le problème principal avec ce programme, c'est que bien qu'étant présent sur sourceforge et google code, son code source n'est pas fourni. Le code tarabiscoté et les noms de variable b123 et b1234 sont peut être dus à l'utilisation d'un obfuscateur de code ou quelque chose de similaire.
Je ne me hasarderais pas à utiliser ce programme, dont l'une des fonctionnalités semble être d'intercepter des requêtes web pour les dupliquer vers un sniffer, sur autre chose qu'un réseau isolé et ne contenant rien de sensible...
@disedorgue: Pourtant, tu en as bien trouvé un bout, non?
Où l'as-tu trouvé? Y a-t-il le reste?
Hum... Généralement, un obfuscateur de code obfusque tout. Il aurait "oublié" les variables lockurl, wafbox et finport?Le code tarabiscoté et les noms de variable b123 et b1234 sont peut être dus à l'utilisation d'un obfuscateur de code ou quelque chose de similaire.
Disedorgue l'a probablement décompilé. Les noms de variable citées sont bien présentes dans les classes (binaire).
Oui, j'ai juste décompilé la classe qui nous interressait ici pour comprendre pourquoi une simple redirection de l'entrée vers un fichier ne fonctionnait pas.
Pour l'autre souci, le script qui passe par un wait (ou fg), doit certainement sortir car le fils a certainement forker un autre processus avant de mourir et donc le père principal en mourrant fait mourir le fork (enfin, quelque chose dans ce gout là).
Salut à tous,
Pour ceux qui voudrait passer par le programme Expect, voici un exemple d'utilisation pour le fameux WOF.jar de ce post.
ps: j'ai pas de java installé, donc pas pu tester l’exécution du script.
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #!/usr/bin/expect -f ## Author : silfun1. ## Version 1 ## Description ## Use the WOF.jar #Variables set WOFBINJAR "WOF.jar" set PORTNUMDEF "80" set timeout 10 match_max 6000000 #--- Check arguments + Variables if {[llength $argv] == 0} { send_user "Usage: interface passive_engine waf_box port\n" exit 1 } set theinterface [lindex $argv 0] if {[llength $theinterface] < 1} { send_user "No Interface chosen\n" exit 1 } set theengine [lindex $argv 1] if {[llength $theengine] < 1} { send_user "No Passive engine\n" exit 1 } set thewafbox [lindex $argv 2] if {[llength $thewafbox] < 1} { send_user "No WAF Box\n" exit 1 } set theportnumber [lindex $argv 3] if {[llength $theportnumber] < 1} { if {[llength $PORTNUMDEF] > 1} { send_user "Default Port $PORTNUMDEF will be used" } } #----------------------- #------ Launch the jar ------- spawn java -jar $WOFBINJAR expect "Choose Interface:\r" send "$theinterface\r" expect "LOCK PROFILE(Website) FOR PASSIVE ENGINE:\r" send "$theengine\r" expect "ENTER WAF-BOX URL:\r" send "$thewafbox\r" expect "ENTER PORT NO:\r" send "$theportnumber\r" close
Sylvain
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager