IPのリストがあり、nmap
を使用して開いているポートを確認する必要があります。これまでのところ、私のスクリプトは次のようになっています。
#!/bin/bash
filename="$1"
port="$2"
echo "STARTING NMAP"
while IFS= read -r line
do
nmap --Host-timeout 15s -n $line -p $2 -oN output.txt | grep "Discovered open port" | awk {'print $6'} | awk -F/ {'print $1'} >> total.txt
done <"$filename"
それはうまく機能しますが、遅いので、たとえば、ファイルから100個のIPを1つずつ実行するのではなく、一度にチェックしたいと思います。
これが1つの方法です:
#!/bin/bash
filename="$1"
port="$2"
echo "STARTING NMAP"
## Read the file in batches of 100 lines
for((i=100;i<=$(wc -l < "$filename");i+=100)); do
head -n "$i" "$filename" | tail -n 100 |
while IFS= read -r line
do
## Launch the command in the background
nmap --Host-timeout 15s -n $line -p $2 -oN output.txt |
grep "Discovered open port" | awk {'print $6'} |
awk -F/ {'print $1'} >> total.txt &
done
## Wait for this batch to finish before moving to the next one
## so you don't spam your CPU
wait
done
-iLオプションを使用して、宛先IPアドレスのリストにファイルを渡すことができます。宛先IPアドレスは、スペース、タブ、または新しい行で区切ることができ、ループは必要ありません。
コマンドはバックグラウンドで実行できます。
nmap ... >> total.txt &
スクリプト内ですべてのバックグラウンドプロセスが終了するのを待つと便利な場合があります。
[...]
done <"$filename"
wait