Veröffentlicht 6. Juli 20178 j Hallo, ich brauche einen Wordlist Generator geschrieben als Bash Script, welcher folgendes tut: Verschiedene Werte Abfragen und in ein Array schreiben. Also zum Beispiel Wort1? Wort2? etc. Außerdem sollen verschiedene Sonderzeichen verwendet werden, welche am besten auch beliebig definiert werden können. Anschließend sollen diese Werte in jeder beliebigen Kombination ausgegeben bzw. weggesichert werden. Beispiel: Wort1: baum Wort2: blume Wort3: bär Mögliche Sonderzeichen: + - : . #Ausgabe soll dann sein: baum baumblume baumblumebär baum.blumebär baumblume.bär baum.blume.bär baum.blume.bär. .baum.blume.bär .baum.blume.bär. .baum.blume. blume.baum.bär .blume-baum-bär. Die Ausgabe hier ist lange nicht vollständig aber ich denke am Beispiel ist erkennbar was der Sinn ist. Jede mögliche Kombination aus allen oder einzelnen Werten soll erstellt werden. Kann mir dazu jemand einen Ansatz geben?
7. Juli 20178 j Die Sonderzeichen dürfen sich also wiederholen, die Worte aber nicht? Kein baumbaumbaum?
9. Juli 20178 j Autor Doch, es darf sich auch alles wiederholen. Also ginge Beispielsweise auch: baumbaumbaum baum.baum-baum; baum.bär.baum usw.
9. Juli 20178 j Wenn sich alles wiederholen darf, wäre die Liste unendlich groß, da es unendlich viele Kombinationen gäbe.
9. Juli 20178 j Autor Das stimmt, dann wäre vielleicht eine Begrenzung auf eine bestimmte Anzahl Wörter nötig. Per Parameter am besten, aber hardkodiert reicht auch. Den Parameter kann ich mir selbst basteln.
9. Juli 20178 j Einen Ansatz solltest du aber selbst schaffen oder? Versuch es doch mal mit einer Datenstruktur ala Binärbaum.
9. Juli 20178 j Autor Ich bin nun ein wenig weiter. Ich habe zum testen die Variablen noch statisch festlegen lassen. Später werden sie vom User eingegeben. Das folgende Script ist mein erster Ansatz und ich hoffe das mir auf dieser Basis jemand weiter helfen kann. Vielen Dank schon einmal. #!/usr/bin/env bash clear #remove existing dev file rm dev.txt #get informations #write informations into dev.txt firstname=1 echo $firstname >> dev.txt lastname=2 echo $lastname >> dev.txt birthday=3 echo $birthday >> dev.txt birthmonth=4 echo $birthmonth >> dev.txt birthyear=5 echo $birthyear >> dev.txt #declare array #write values into array declare -a infos0 mapfile -t infos0 < dev.txt declare -a infos1 mapfile -t infos1 < dev.txt #for every element of array for (( i = 0 ; i < ${#infos0[@]} ; i++)) do #show content of element echo "Element [$i]: ${infos0[$i]}" done #declare variable declare password #for every element of array0 for (( i = 0 ; i < ${#infos0[@]} ; i++)) do #store removed array element in variable removed_value=${infos1[0]} #show removed element content echo removed_value=$removed_value #define array element to remove pos=0 #remove element from array infos1=(${infos1[@]:0:$pos} ${infos1[@]:$(($pos + 1))}) #add removed element at end of array infos1=("${infos1[@]}" $removed_value) #write content from first element of password in variable word=${infos0[$i]} #for every element of array1 for (( i = 0 ; i < ${#infos0[@]} ; i++)) do #combine variable and element of array1 password=$word${infos1[$i]} echo password: $password #for every element of array1 for (( i = 0 ; i < ${#infos0[@]} ; i++)) do #combine variable and element of array1 password=$password${infos1[$i]} echo password: $password done done done
10. Juli 20178 j Autor Ein anderer, eventuell einfacherer, Ansatz: Ich hänge die Variablen aneinander. Ganz einfach so: baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär Und setze dann immer erst nach einem und dann nach drei Wörtern einen "cut". Also Beispielsweise für eine Wordlist einen Zeilenumbruch. Dann sähe die Wordlist ungefähr so aus: baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär baum blume bär baum blume Vorgehen mit mehr als drei Wörtern: Erst nach einem Wort den "cut" setzen, und anschließend nach $x Wörtern. Wobei $x die Anzahl der gesamt zur verfügung stehenden Wörtern ist. Damit habe ich alle möglichen Kombinationen aus verschiedenen Wörtern. --- Jetzt muss noch mit eingebracht werden: - Wörter dürfen sich wiederholen. (Beispiel: baumbaumbaum, baumbaumblume) - Trennzeichen müssen mit einbezogen werden. (Beispiel: baumbaum baum, baum-baum.baum)
11. Juli 20178 j Ist vom Prinzip her eigentlich ganz einfach. Wörter in ein Array einlesen erlaubte Sonderzeichen in ein zweites Array einlesen verschachtelte Schleifen nutzen, um die Inhalte auszugeben. (Beispiel für 3 Wörter plus dazwischen 2 Mögliche Sonderzeichen oder kein Sonderzeichen dazwischen) Hinweis: ${#arr} = Anzahl der Elemente im Array #Sonderzeichen-Array füllen (Welche Zeichen sollen möglich sein - auch kein Sonderzeichen) declare -a sonderzeichen=("" "+" "-" "." ":") #Array mit Wörtern füllen - der Einfachheit halber hier statisch vorgegeben declare -a arr=("baum" "baer" "blume") ## durch Array "arr" gehen for i in "${arr[@]}" do for j in "${sonderzeichen[@]}" do for k in "${arr[@]}" do for l in "${sonderzeichen[@]}" do for m in "${arr[@]}" do echo "${arr[$i]}" "${sonderzeichen[$j]}" "${arr[$k]}" "${sonderzeichen[$j]}" "${arr[$m]}" "\n" done Ob die Syntax stimmt, weiß ich nicht, da ich hier keine Bash zur Verfügung habe. Vom Prinzip sollte es so in der Art aber eigentlich funktionieren. Aufpassen muss man eventuell mit Buchstaben wie ä, ö und ü, sowie ß, ob diese richtig dargestellt werden. Alternativ könnte es auch so gehen: #Sonderzeichen-Array füllen (Welche Zeichen sollen möglich sein - auch kein Sonderzeichen) declare -a sonderzeichen=("" "+" "-" "." ":") #Array mit Wörtern füllen - der Einfachheit halber hier statisch vorgegeben declare -a arr=("baum" "baer" "blume") for ((i=0; i < ${#arr}; i++)) do for ((j=0; j < ${#sonderzeichen}; j++)) do for ((k=0; k < ${#arr}; k++)) do for ((l=0; l < ${#sonderzeichen}; l++)) do for ((m=0; m < ${#arr}; m++)) do echo "${arr[$i]}" "${sonderzeichen[$j]}" "${arr[$k]}" "${sonderzeichen[$j]}" "${arr[$m]}" "\n" done
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.