ホスト検証のための単純なBashスクリプト

ホスト検証のための単純なBashスクリプト

現在アクティブなシステムを確認するためにbashでツールを作成しようとしています。狂気の複雑なツールになる必要はありません。私のコンピュータが動作していることを知らせるためだけに必要です。私は私のスクリプトがGarboであることを知っていました...それが私がここにいる理由です。

#!/bin/bash

here()
{
ping -c 1 $1 > dev/null
echo "Good morning, Here are the machines that are up and running: $i"
}

for i in insert ip range
do here $i
done

答え1

nmapに関するいくつかの点を考慮していますか?

nmap -sP 10.1.2.0/24 10.2.5.0/24

これはpingループよりも簡単で、複数のホストを並列に検索できるため、高速です。ただし、nmapと一般的な依存関係をインストールする必要があるため、常駐セキュリティ担当者は最悪のシナリオに集中する可能性があります。

アップデート:いいですね。もちろんOberleutnantenです。

代わりに:

xargs parallel -j20 ping -c1 -- | grep 'bytes from'

良い

echo 10.0.{1..2}.{1..15} |\
  xargs parallel -j20 ping -c1 -- | grep 'bytes from'

64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.150 ms
64 bytes from 10.0.2.4: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.138 ms

ほとんどの時間は、pingがすぐに終了するのを待つのに費やされるので、タイミングも良いです。まもなく肯定的な結果が出るでしょう。

$ time (echo 10.0.{1..2}.{1..15} | xargs parallel -j30 ping -c1 -- | grep 'bytes from')
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.150 ms
64 bytes from 10.0.2.4: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.138 ms

real    0m10.030s
user    0m0.019s
sys     0m0.018s

Winboxもスニッフィングするには、pingを嫌うarpingと特定のパラメータをpingに置き換えます。

もっとクールにしたい場合は、cheesy grepをawk '/bytes from/{print $4}'に置き換えてください。

間違いなく他の人のアイデアは素晴らしいクイズの提出のように見え、私のアイデアはドライバーで釘を打つように見えましたが、速くて簡単でした。

答え2

これに似たものが役に立ちます。 IP リストに必要な数の IP を追加します。

#!/bin/bash

ips=(192.168.0.1 8.8.8.8 127.0.0.1)

here() {
    ping -c 1 $1 > /dev/null

    if [[ $? -eq 0 ]]
    then
        echo "Good morning, Here are the machines that are up and running: $i"
    fi

}

for i in ${ips[@]}

do here $i

done

答え3

あなたのIP範囲はどれくらい大きいですか?

/ 24について考える

for i in {1..254} ; do
    if ping -c1 10.11.12.$i >/dev/null 2>/dev/null ; do
        echo "10.11.12.$i is up"
    else
        echo "10.11.12.$i is down
    fi
done

/ 16の場合は、2番目のループを追加できます。

for j in {1..254} ; do
    for i in {1..254} ; do
        if ping -c1 10.11.$j.$i >/dev/null 2>/dev/null ; do
            echo "10.11.$j.$i is up"
        else
            echo "10.11.$j.$i is down
        fi
    done
done

それからコーヒーのカップを飲み、それが終わるまで待ちます。

しかし、nmapそれは実際に正しいツールです。

答え4

あなたのため。

次のように使用できます。

./your_script_name.sh 192.168.1.0/24

#!/bin/bash

SUBNET=$1

if [[ -z "$SUBNET" ]]; then
    echo "Usage: ./your_script_name.sh <SUBNET>"
    exit
fi

printsubnet() {
        local OLDIFS="$IFS"
        local SUB=${1/\/*/}
        local MASK=$(( 1 << ( 32 - ${1/*\//} )))

        IFS="."
                set -- $SUB
                IPS=$((0x$(printf "%02x%02x%02x%02x\n" $1 $2 $3 $4)))
        IFS="$OLDIFS"

        for ((N=0; N<MASK; N++))
        {
                VAL=$((IPS|N))

                printf "%d.%d.%d.%d\n"                  \
                        $(( (VAL >> 24) & 255 ))        \
                        $(( (VAL >> 16) & 255 ))        \
                        $(( (VAL >> 8 ) & 255 ))        \
                        $(( (VAL)       & 255 ))
        }
}

mapfile IPS < <(printsubnet $SUBNET)

for row in "${IPS[@]}";do
        ping -c 1 "$row" >/dev/null 2>/dev/null
        if [ $? -eq 0 ]; then
                echo "$row is up"
        else
                echo "$row is down"
        fi
done

関連情報