여러 네트워크 호스트가 제대로 작동하는지 빠르게 확인하세요.

여러 네트워크 호스트가 제대로 작동하는지 빠르게 확인하세요.


목표: 많은 호스트에서 효율적으로 병렬화할 수 있는 방법을 사용하여 호스트가 네트워크에서 실행되고 있는지 확인합니다.

빠른 수표 처리를 강조합니다.

속도를 강조하는 이유: 여러 검사(수백 번)를 빠르게 연속해서 수행하고 결과를 상당히 빠르게 반환해야 하기 때문입니다.


현재 접근 방식

현재 스크립트는 간단한 ping명령을 사용합니다. 선택은 필수는 아니지만 반대로어느동등하거나 더 나은 신뢰성과 속도를 갖춘 적절한 도구를 대안으로 사용할 수 있습니다.

현재 스크립트

다음과 같이 :

ping -c 1 -W 100 -q "$NETWORK_HOST" &> /dev/null

이 접근 방식의 명백한 단점은 1초 미만의 응답 시간이 필요하다는 것입니다. 경험상 응답 시간은 최대 1초까지 걸릴 수 있습니다.

대안을 고려하세요

순차적 실행 속도는 잊어버리세요. pingGNU를 사용하여 많은 명령을 병렬로 실행 parallel하고 마지막에 결과를 대조하세요. 이것은 시도되었지만 실제로는 더 나쁜 것 같습니다.

더 나은 솔루션에 대한 직관

이 것 같다ping 가능한"폴링 상태 확인"으로 잘 작동합니다. 응답이 없을 경우를 대비해 매우 짧은 시간과 시간 초과를 기다리는 것뿐입니다.

가정: 네트워크는 안정적이고 빠른 것으로 간주되지만 호스트가 반드시 이러한 특성을 가질 필요는 없습니다.


질문

이 문제를 어떻게 해결하시겠습니까? 어떤 도구를 사용하시겠습니까? 이것이 올바른 접근 방식입니까? 코드 조각을 제공할 수 있나요?


  • 환경: OS X + Ubuntu 호스트
  • 스크립트 셸: Bash
  • 필요한 경우 추가 소프트웨어를 설치할 수 있습니다.
  • 저장소에 없는 애플리케이션에 대해 새 코드를 컴파일/설치하여 사용할 수 있습니다.

답변1

핑이 충분히 좋다면,평평한즉시 병렬로 작업할 수 있는 대안입니다.

이것은 내가 사용하는 것의 단순화된 버전입니다. 파이프로 연결된 호스트 목록(한 줄에 하나씩)과 함께 작동합니다.

probe_hosts() {
    local report
    fping 2>/dev/null | while read report;
    do
        local host=${report/ is *}
        local state=${report/* is }
        if [ "$state" == "alive" ];
        then
            echo $host
        else
            echo unreachable: $host >&2
        fi
    done
}

# this is how you use it:
cat list_of_hosts \
    | probe_hosts \
    | do_something_with_live_hosts

답변2

nmap범위를 지정할 수 있습니다 .

$ nmap -sn 138.0.0.0/24
$ nmap -sn 138.0.0.0-255

-sn플래그는 호스트에 대해 ping만 수행하고 반환한다는 의미입니다(즉, nmap평소처럼 포트 스캔을 수행하지 않음).

편집하다:댓글을 읽은 후 Bahamat이 언급한 것을 보았습니다 arp. 실제로 arp매개변수가 없으면 내가 할 수 있는 것보다 더 빠르게 실행되며 nmapLAN에 연결된 모든 것을 찾습니다.

$ time arp
real    0m0.411s

관련 정보