調査ネットワーク内にあるホストの応答を確認する
スクリプト名: ipres.sh
書式: ipaddr.sh IPアドレス ネットマスク値
目的: 指定したネットワーク内にある起動中のホストが応答を返すかを調べる
戻り値: 正常動作:0 失敗:1 エラー:9
#!/bin/sh . Error_Msg.sh && . Arg_Nums.sh && . Tmp_Lock.sh || exit 9 Arg_Nums -eq 2 "$@" _NETWORK=$(./ipaddr.sh "$1" "$2" | grep NETWORK_ADDRESS | awk '{print $3}') _NW=($(echo $_NETWORK | sed 's/\./ /g')) _BROADCAST=$(./ipaddr.sh "$1" "$2" | grep BROADCAST_ADDRESS | awk '{print $3 }') _BC=($(echo $_BROADCAST | sed 's/\./ /g')) _CIDR=$(ipaddr.sh "$1" "$2" | grep CIDR | awk '{print $3}') #引数の確認 [ "$_NETWORK" != "" ] ||\ { Error_Msg "$0" "Specity IP address and netmask value."; exit 1; } #ログファイルの確認 Tmp_Lock -lm $_NETWORK-$2 ||\ { Error_Msg "$0" "Generation of lock file failed."; exit 1; } trap "Tmp_Lock -lr $_NETWORK-$2; exit 1" 1 2 3 9 15 #ログのタイトル出力 echo "Ping Result: $_NETWORK/$2" | tee "$_TMP_LOCK_FILE" #pingによる調査とログへの結果出力 while [ ${_NW[0]} -le ${_BC[0]} ]; do while [ ${_NW[1]} -le ${_BC[1]} ]; do while [ ${_NW[2]} -le ${_BC[2]} ]; do while [ ${_NW[3]} -le ${_BC[3]} ]; do _IPADDR=$(echo ${_NW[@]} | sed 's/ /\./g') if [ "$_IPADDR" != "$_NETWORK" -a\ "$_IPADDR" != "$_BROADCAST" ]; then ping -n 1 -w 1 $_IPADDR &>/dev/null if [ $? = 0 ]; then echo "$_IPADDR [ ALIVE ]" | tee -a "$_TMP_LOCK_FILE" else echo "$_IPADDR [ DEAD ]" | tee -a "$_TMP_LOCK_FILE" fi fi _NW[3]=$(( ${_NW[3]} + 1 )) done _NW[3]=0; _NW[2]=$(( ${_NW[2]} + 1)) done _NW[2]=0; _NW[1]=$(( ${_NW[1]} + 1)) done _NW[1]=0; _NW[0]=$(( ${_NW[0]} + 1)) done