호스트가 온라인 상태인지 확인

호스트가 온라인 상태인지 확인

저는 컴퓨터의 안정성을 테스트하고 있으며 호스트가 온라인인지 확인하기 위해 Bash 스크립트를 작성하는 간단한 방법이 필요합니다. 이 스크립트를 어떻게 작성해야 하나요?

if [ ! $(hostisonline) ]; then
    # profit
fi

답변1

호스트가 ping에 응답하면 온라인 상태인지 테스트합니다(단순한 예).

ping -c 10 $host

ping이 반환되지 않거나 금지된 경우 nmap을 통해 개별 서비스를 확인합니다.

nmap $host -p $known_port --max-retries 10 | grep -q open

예를 들어 SSH를 열어야 하는지 테스트하려면 Known_port를 22로 바꾸세요.

스크립트의 경우 다음과 같을 수 있습니다(예 - 일요일 아침이었고 지루했기 때문에 일부 편집 후 약간 커졌습니다. 하나가 아닌 여러 호스트를 테스트하도록 설계되었습니다).

declare -A SERVER
# SERVER["NAME - Description"]="IP KNOWNPORT"
SERVER["SERVER1 - Client foo"]="111.111.111.111 22"
SERVER["SERVER2 - Client bar"]="222.222.222.222 80"
# ...
# add as many server/port combinations as you'd like

NMAP_MAX_RETRIES=10

printf "========================= ========================= ========== ==========\n"
printf "%25s %25s %10s %10s\n" "Host Description" "IP" "Port" "Status"
printf "========================= ========================= ========== ==========\n"


for server in "${!SERVER[@]}"; do
    set -- ${SERVER["$server"]}
    eval nmap \$1 -p \$2 --max-retries $NMAP_MAX_RETRIES | grep -q open
    if [ "$?" == "0" ]; then
        STATUS="[OK]"
    else
        STATUS="*DOWN*" 
    fi
    printf "%25s %25s %10s %10s\n" "$server" "$1" "$2" "$STATUS" 
done

 printf "========================= ========================= ========== ==========\n"

실행되면 다음이 반환됩니다(가짜 IP이므로 서버가 다운됨).

 ~$ bash /tmp/foo.sh
 ========================= ========================= ========== ==========
          Host Description                        IP       Port     Status
 ========================= ========================= ========== ==========
      SERVER2 - Client bar           222.222.222.222         80     *DOWN*
      SERVER1 - Client foo           111.111.111.111         22     *DOWN*
 ========================= ========================= ========== ==========

답변2

간단한 해결책은 다음과 같습니다.

ping -W 1 $ip

여기서 -W시간 초과를 초 단위로 지정합니다.

대문자 W인지 확인하세요. -i대기 시간을 초 단위로 지정할 수도 있습니다 .

관련 정보