現在アクティブなシステムを確認するために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