호스트 확인을 위한 간단한 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

이는 핑 루프보다 간단할 수 있고 여러 호스트를 병렬로 검색할 수 있으므로 속도가 더 빠릅니다. 그러나 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

대부분의 시간이 핑이 즉시 종료되기를 기다리는 데 소비되므로 타이밍도 좋습니다. 곧 긍정적인 결과가 나올 것입니다.

$ 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의 경우 두 번째 루프를 추가할 수 있습니다.

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

관련 정보