Bash Pingは「アクティブ」IPアドレスを返します。

Bash Pingは「アクティブ」IPアドレスを返します。

(免責事項 - bashシェルスクリプトを使用すると、これを簡単に行うことができますが、練習する必要がありますnmap。)

$ scriptname 192.168.42 18 23 

Checking: 192.168.42.18 19 20 21 22 23 

Live hosts: 
 192.168.42.21 
 192.168.42.22 

There were: 
 5 alive hosts 
 1 not alive hosts 
 found through the use of 'ping'. 

上記の出力は次のとおりです。 「確認中:...」には、確認しているすべてのIPが一覧表示されます。すべてのアクティブホストが「アクティブホスト」の下に一覧表示され、フルアクティブおよび非アクティブホストが実行されます。

これが私が今まで持っているものです

for i in `seq ${2} ${3}`    
do
    ping -c 1 -t 1 ${1}.${i} > /dev/null 2>&1;
    if [ $? -eq 0 ]; then
        echo "Live hosts: \n ${1}.${i}"; LIVECOUNT=$( ???? )
    fi
done

なぜならLIVECOUNT=$( ???? )何を入れるべきか分からないからです。生きている/無生物の累計をどのように維持するのか分かりません。確認が完了するまで、「Live Host」と「Has」セクションが表示される必要はありません。

ベストアンサー1

最初の質問に対する短い答えはですLIVECOUNT=$((LIVECOUNT+1))。この算術拡張は二重括弧$(())で表され、変数LIVECOUNTはpingコマンドが0を正常に返すたびに増加します。

ホストの総数を計算する簡単な方法は、親アドレス(${3})から子アドレス(${2})を引いた後、1 を加えてホストの総数を取得することです。

だから:

#!/bin/bash
CHECKING=${1}.
LIVEHOSTS=""
LIVECOUNT=0
TOTALHOSTS=$(($3 - $2 + 1))
for i in `seq ${2} ${3}`
do
    CHECKING="$CHECKING${i} "
    ping -c 1 -t 1 ${1}.${i} > /dev/null 2>&1;
    if [ $? -eq 0 ]; then
        LIVEHOSTS="$LIVEHOSTS \n ${1}.${i}"
        LIVECOUNT=$((LIVECOUNT+1))
    fi
done
echo ""
echo "Checking: $CHECKING"
echo ""
echo "Live hosts:"
echo -e "$LIVEHOSTS"
echo ""
echo "There were:"
echo "$LIVECOUNT alive hosts"
echo "$((TOTALHOSTS - $LIVECOUNT)) not alive hosts"
echo "found through the use of ping"

次の点に注意してください。 $ CHECKINGは、パラメータ1 $ {1}によって提供されたサブネットで始まり、doループが繰り返されるたびに現在のホスト番号$ {i}を追加する文字列です。

フォーマットされた方法(「ライブホスト:」行の前に「チェック:」行を追加)により、ライブホストを文字列($ CHECKINGに似ている)に保つのが簡単に見えます。これは$ LIVEHOSTSの意味です。

$ LIVEHOSTSと$ LIVECOUNTは、何が起こっているのかを明確にするために空白と0に初期化されます。これは必須ではありません。

$LIVEHOSTSを出力するときは、echo -eを使用してください。これは\ nが改行文字として機能できるようにするためです。

編集:最後のリストの代わりに現在確認されているIPを表示するには、その行を置き換え、CHECKING="$CHECKING${i} "削除echo "Checking $CHECKING${i}"、またはコメントアウトしますecho "Checking: $CHECKING"echoそうだったから~へループ内では、do$ iの現在の値を使用してパスごとに印刷します。 (これは、echo "Live hosts"元のスクリプトで使用したものについて@slmが指摘したものと同じです。)

おすすめ記事