Podczas rozwiązywania niektórych problemów CTF w Internecie natknąłem się na sytuację, w której musiałem brutalnie zmusić serwer. Oto kod, który napisałem:
#!/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
To było niesamowicie, boleśnie powolne . Musiałem wypróbować kombinacje od 1000 do 9999 i zajęło to około 5 sekund na każde 10 prób. Następnie, zgodnie z radą, umieszczam znak „&” na końcu tego wiersza:
echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &
I wypróbował setki kombinacji w ciągu kilku sekund. Byłem bardzo zaskoczony. Czy ktoś mógłby mi wyjaśnić logikę? Co zrobiły „&”?
for i in {1000..9999}
wait
na końcu.
nc -z localhost 1000-2000
?
&
sprawia, że polecenie działa w tle, to wszystko. Nie przyspieszyło to ani nic. Przeczytaj, jakiej powłoki używasz (zakładam bash) manual.