pingスキャン用のbashスクリプトを作成しましたが、ダウンしたホストの場合は時間がかかるため、&
最後にget_ip関数を使用してマルチスレッドを試みました。しかし、これはうまくいかないようです。これをより迅速に達成するには、どのようにスクリプトを作成する必要がありますか?
#!/bin/bash
get_ip () {
ping -c 1 $1.$i 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1.$i is up"
else
echo "$1.$i is down"
fi
}
if [ $1 ];then
for i in {0..255};
do
get_ip "$1" &
done
else
echo "Enter the IP address to scan"
fi
答え1
この速度には問題ないと思います。それは非常に速く間違ったことをします。問題は変数名です。i
そして1
非常に似ているようです。混同しないでください。
function内には、スクリプト入力ではなく$1
関数入力(コマンドライン引数など)もあります。
それでは、いくつかの修正を適用しましょう。
これで、関数は入力(フルIPアドレス)を使用します。
#!/bin/bash
get_ip () {
ping -c 1 $1 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1 is up"
else
echo "$1 is down"
fi
}
mainは関数に渡す完全なIPアドレスを生成します。
if [ $1 ];then
for i in {0..255};
do
get_ip "$1.$i" &
done
else
echo "Enter the first 3 octets of the IP address to scan, as the 1st argument of this script."
fi