Tout en résolvant certains défis CTF en ligne, je suis tombé sur une situation où j'avais besoin de forcer un serveur. Voici le code que j'ai écrit:
#!/bin/bash
for i in {0..9}{0..9}{0..9}{0..9}
do
echo "Now trying code.."
echo $i
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt
done
C'était incroyablement, douloureusement lent . J'avais besoin d'essayer des combinaisons de 1000 à 9999 et cela prenait environ 5 secondes pour 10 essais. Puis, suite à un conseil, j'ai mis un '&' à la fin de cette ligne:
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &
Et, il a essayé des centaines de combinaisons en quelques secondes. J'étais très surpris. Quelqu'un pourrait-il m'expliquer la logique? Qu'est-ce que le «&» a fait?
for i in {1000..9999}
wait
à la fin.
nc -z localhost 1000-2000
?
&
fait exécuter la commande en arrière-plan, c'est tout. Cela ne l'a pas rendu plus rapide ou quoi que ce soit. Lisez le manuel du shell que vous utilisez (je suppose bash).