現在、bashでスキャナーを実行しています。
アイデアは、入力としてネットワークを受け取り、それを反復しながら、IP に ping を実行し、ポートが開いているかどうかを調べることです。
変数の説明(例):
入力 -> スキャンするネットワーク: 192.168.1.0/24
開始 IP: 192.168.1.0 -> $i1.$i2.$i3.$i4
最後の IP: 192.168.1.255 -> $m1.$m2.$m3.$m4
for oct1 in $(seq $i1 1 $m1); do
for oct2 in $(seq $i2 1 $m2); do
for oct3 in $(seq $i3 1 $m3); do
for oct4 in $(seq $i4 1 $m4); do
ping -c 1 $oct1.$oct2.$oct3.$oct4 | grep "64 bytes" | cut -d" " -f4 | tr -d ":" >> scan.txt
nc -nvz $oct1.$oct2.$oct3.$oct4 80 2>&1 | grep succeeded | cut -d" " -f4 >> scan.txt
done
done
done
done
ファイルscan.txtは次のようになります。
192.168.1.1
80
192.168.1.2
192.168.1.4
192.168.1.5
192.168.1.7
80
192.168.1.9
(...)
私の唯一の問題は、このソリューションは機能しますが、時間がかかりすぎることです。
192.168.1.0/24 ネットワークをスキャンすると、スクリプトが正常に起動することがわかりましたが、約 10 個の IP をスキャンした後、速度が低下し始め、ほとんど動けなくなりました。
これは、ジョブをバックグラウンドで実行している ping および nc コマンドと関係があると思います。ping および nc コマンドの最後に追加& disown
すると、実行ははるかにスムーズになりますが、出力が乱れます。
.1 から .254 になる代わりに、次のようになります。
192.168.1.6
80
192.168.1.10
80
80
192.168.1.1
192.168.1.5
192.168.1.3
(...)
より高速に実行するために、このコードを最適化 (または別の方法で実行) できますか?