컴퓨터가 온라인 상태인지 확인하기 위해 ping하는 것보다 빠른 방법은 무엇입니까?


20

랩 컴퓨터 용 LAN 스크립트를 깨우고 있습니다. 우리는 컴퓨터 호스트 이름, IP 및 MAC 목록이있는 sqlite db를 가지고 있으며 현재 '-c1'로 각각 핑합니다. 그래서 끝없이 실행되지는 않습니다. 핑보다는 대답? ping을 사용하면 ping 응답이 계속 필요하므로 스크립트 속도가 약간 느려집니다.

어떤 제안에 감사드립니다!

답변:


20

단일 패킷을 전송하고 응답을 기다리는 것이 가장 빠른 방법 중 하나가 될 것입니다. 핑 (Ping)을 사용하는 것이 좋습니다. 실제로 유스 케이스에 따라 시스템이 실제로 유용한 것을 수행하는지 여부를 알려주지 않고 커널의 네트워크 서브 시스템이 살아 있고 구성되어 있기 때문에 너무 빠르다고 주장 합니다.

그러나 충분하다고 가정하면 개선 할 수 있습니다. 먼저 -W1핑 시간 초과를 1 초로 줄이는 데 사용할 수 있습니다 . 둘째, 스크립트가 다른 호스트를 백그라운드 스레드에서 비동기 적으로 핑하도록하고 대기하지 않고 필요에 따라 결과를 확인할 수 있습니다.

또는 접근 방식을 다시 생각하고 원격 시스템이 작동 중일 때 어떻게 든 체크인하도록 할 수 있으며 시스템이 체크인되지 않은 경우 작동 중지 된 것으로 가정 할 수 있습니다.


-w 추가에 대한 좋은 전화는 두 대의 컴퓨터를 만들어야했지만 많은 컴퓨터가 충분히 빨리 응답하지 않았습니다. 정기적 인 체크인이나 핸드 셰이크를 추가 할 수도 있지만 지금은 내가 켜고있는 컴퓨터의 외부 프로세스를 원합니다.
Jon Phenow

1
또한 -s를 사용하여 더 작은 패킷을 보냅니다.
Shawn J. Goff

3
작은 패킷을 보내면 차이가 생기면 충격을받습니다.
mattdm

그들은 이미 거의 최소 크기의 패킷으로 전송되지 않았습니까?
Jon Phenow

4
그들은 아주 작습니다. 기본값은 56 데이터 바이트이며 줄일 수 있습니다. 그러나 어떠한 경우에도 이더넷 MTU보다 작고 아무것도 아닌 것보다 크므로 어느 쪽이든 "하나의 패킷"이됩니다.
mattdm

7

이것이 fping을 위해 설계된 것입니다. http://fping.sourceforge.net/

리턴 코드에 의존하는 대신 나중에 출력을 구문 분석해야하지만 일반 Ping을 수행하는 것보다 훨씬 빠릅니다.


"ping과 달리 fping은 스크립트에서 사용하기위한 것이며 출력을 구문 분석하기 쉽습니다." 그러나 그것은 리턴 코드를 제공하지 않습니다
Adam Plocher

리턴 코드에 적합한 값은 무엇입니까?
Thorbjørn Ravn Andersen

3

이것은 하나 또는 두 대의 컴퓨터에서만 작동하지만 상태 확인을 담당하는 컴퓨터에 직접 연결 ethtool하면 링크가 활성화되어 있는지 확인할 수 있습니다 .


나는 이것을 위해 ethtool을 사용하지 않았습니다. 예를 들어 주시겠습니까? (또는 아마도 링크)?
요한

ethtool {network_interface} | grep "Link detected" | cut -f 3 -d ' 'yes컴퓨터가 연결되어 있고 연결되어 있지 않으면 반환 됩니다 no.
LawrenceC

2

브로드 캐스트 주소를 핑하면 모든 컴퓨터가 핑백해야합니다. 그런 다음이 목록을 SQLite에있는 것과 비교하여 모든 컴퓨터가 작동하는지 확인할 수 있습니다.

다른 하나는 핑이 컴퓨터가 네트워크에서 깨어날 수있는 가장 빠른 방법 일 것입니다. 다른 답변에서 언급했듯이 이것은 실제로 유용한 데이터를 제공하지 않습니다. 스크립트를 설치하는 기능이 있으면 중앙 서버를 핑 (ping)하기 위해 cronjob을 추가하거나 작업을 실행하거나 요청을 기록 할 중앙 서버로 프로세스 목록을 출력 할 수 있습니다. 그런 다음 간단히 확인하면 매번 수동으로 확인할 필요가없는 문제가 있는지 알려줍니다.


1
게이트웨이가 아닌 브로드 캐스트 주소를 핑한다고 가정합니다. 현대 시스템에서는 아마 작동하지 않을 것입니다. unix.stackexchange.com/questions/7458/cant-ping-broadcast
mattdm

1
@mattdm : 그렇다면 멀티 캐스트 ? 나는 대부분의 사람들이 그것을 끄는 것을 몰랐다. 전에는 문제가 발생하지 않았습니다.
Josh K

하하 네, mattdm 감사합니다. 비슷한 문제가 있습니다. 사람들이 끄는 것이 아니라 일반적으로 최근 방송이 중단되는 것입니다.
Jon Phenow

fping ( fping.sourceforge.net )을 사용 하여 호스트 목록을 병렬로 핑할 수 있습니다 . 그런 다음 브로드 캐스트 주소를 ping 할 수 있어야 할 필요는 없습니다.
mazianni

2

Ganglia 는 멀티 캐스트 트래픽을 사용하여 클러스터의 많은 호스트를 모니터링합니다. 아마도 비슷한 것을 사용할 수 있습니까? 이는 네트워킹 하드웨어가 모든 호스트와 모니터링 시스템 간의 멀티 캐스트 트래픽을 허용한다고 가정합니다.


1
멋진 도구처럼 보이지만이 작은 스크립트의 목적 상 프로젝트에 불필요한 덩어리가 추가되어 현재로서는 작은 스크립트로 유지 될 수 있습니다. 그래도 내 눈을 계속 지켜줄 것입니다. 머지 않아 곧 사용할 수있는 도구처럼 보입니다.
Jon Phenow

0

나는 같은 문제가 있었고 다음과 같은 (빠른 & 더러운) 스크립트를 생각해 냈습니다. 이것은 본질적으로 모든 핑을 개별 작업으로 병렬로 발행하며 3 초 안에 전체 / 24 서브넷을 스캔합니다. 어떤 이유로 든 여기에서 ping 결과 코드를 사용할 수 없다는 것을 알지 못했지만 grep -v가 작업을 수행했습니다.

#!/bin/bash
case $# in
1)
  case $1 in
  [1-9]*)
        echo
        echo Systems active in subnet: $1
        for (( K = 1 ; K < 255 ; K=$K+1 )); do
        # grep -v delivers 0 on no matches
                echo -ne "testing:" $1$K "...    \r"
                (if ping -c 1 -w 1 -n $1$K 2>&1 | grep -q '64 bytes' ; then
                echo $1$K alive "                "
                fi) &
        done
        sleep 3
        echo "                               "
        exit 0
        ;;
  esac;;
esac

0

C에서는

/* count = 1, wait interval = 1 second, no name lookup, */
/* 10 data bytes, 1 second timeout, 200 millisecond wait time */

sprintf(command,"ping -c1 -i1 -n -s10 -t1 -W200 %u" 
   , connection[port].IPAddress);
err = system(command);
/* err == 0 means OK */

0

fping -r0 ...가장 빠른 응답을 제공하는 것으로 나타났습니다 .

-r(재시도) 옵션은 유사한보다 더 빠른 것 같다 -c(카운트). 사용 -r0한 핑의 결과는 전송되는 출력은 많은 다른 옵션에 비해 축약된다.

내 시스템에서 ...

fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01  2>&1

결과는 ...

LX00 is alive
LX02 is alive
HA01 is alive
ICMP Host Unreachable from 192.168.1.5 for ICMP Echo sent to LX01
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable

ICMP메시지를 없애기 위해 약간의 마사지를 하면 나에게 ...

fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01  2>&1 | grep ' is ' | sort

HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable

속도에 관해서는 fping4GB RAM이 장착 된이 오래된 1.8GHz Intel Dual-Core에서 ...

time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1

LX00 is alive
LX02 is alive
HA01 is alive
PRINTER is unreachable
LX01 is unreachable
LX03 is unreachable

real    0m0.554s
user    0m0.000s
sys     0m0.000s

그리고 그 grep와는 sort시간 만에 0.001-0.004s를 추가하는 것 ...

time fping -r0 PRINTER LX00 LX01 LX02 LX03 HA01 2>&1 | grep ' is ' | sort

HA01 is alive
LX00 is alive
LX01 is unreachable
LX02 is alive
LX03 is unreachable
PRINTER is unreachable

real    0m0.558s
user    0m0.000s
sys     0m0.000s

노트

  • ICMP메시지가 모든 실행에 발생하지 않습니다.
  • 2>&1방지하려면이 필요 ICMP로 메시지 가 전송 될 때의 출력에 나타나지 stderr않고 stdout.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.