ping 명령으로 짧은 시간 초과를 설정하는 방법은 무엇입니까?


49

LAN의 모든 호스트를 나열하는 스크립트 (약 20 개가 있음)를 작성하고 각 호스트 옆에 핑 상태를 기록하려고합니다. DHCP 임대 파일이 있으므로 모든 IP (예 : 10.0.0.1, 10.0.0.2 등)가 있으므로 각 호스트의 ping 상태 만 있으면됩니다.

따라서 내 스크립트는 각 호스트마다 단일 핑을 시작합니다.

ping -c 1 10.0.0.1

불행히도 호스트가 오프라인 상태 인 경우 핑 시간이 초과되는 데 시간이 오래 걸립니다. 나는 선택 man ping, 제한 시간 지연을 설정하는 두 가지 옵션이있을 것 같다 : -w deadline-W timeout. 나는 후자에 관심이 있다고 생각합니다.

그래서 나는 이것을 시도했다 :

ping -c 1 -W 1 10.0.0.1

그러나 오프라인 호스트 당 1 초를 기다리는 것이 여전히 너무 깁니다. 나는 그것을 1 초 미만으로 설정하려고 시도했지만 매개 변수를 전혀 고려하지 않는 것 같습니다.

ping -c 1 -W 0.1 10.0.0.1  # timeout option is ignored, apparently

시간 초과를 더 낮은 값으로 설정하는 방법이 있습니까? 그렇지 않다면 대안이 있습니까?

편집하다

  • OS는 데비안 레니입니다.
  • 핑하려는 호스트는 실제로 액세스 포인트입니다. 배포 및 교체가 간단하도록 사용자와 동일한 VLAN 및 서브넷에 있습니다. 이것이 모든 서브넷을 스캔하고 싶지 않은 이유 ping -b입니다 (예를 들어).

편집 # 2

나는 fping해결책을 받아 들였다 (다른 모든 답변에 감사드립니다). 이 명령은 내가 찾던 것을 정확하게 수행합니다.

fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4

이 명령은 완료하는 데 최대 500ms가 걸리며 한 번에 모든 호스트의 핑 상태를 제공합니다.

10.0.0.1 : [0], 84 bytes, 5.71 ms (5.71 avg, 0% loss)
10.0.0.2 : [0], 84 bytes, 7.95 ms (7.95 avg, 0% loss)
10.0.0.3 : [0], 84 bytes, 16.1 ms (16.1 avg, 0% loss)
10.0.0.4 : [0], 84 bytes, 48.0 ms (48.0 avg, 0% loss)

10.0.0.1 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 5.71/5.71/5.71
10.0.0.2 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 7.95/7.95/7.95
10.0.0.3 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 16.1/16.1/16.1
10.0.0.4 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 48.0/48.0/48.0

데비안 레니에서 설치는 간단합니다 :

aptitude update
aptitude install fping

답변:


41

fping 은 사용 중인 스탁 핑보다 더 나은 도구 일 수 있습니다. 어떤 OS를 사용하고 있습니까?

  • "fping은 명령 행에 여러 개의 대상을 지정하거나 ping 할 대상 목록을 포함하는 파일을 지정할 수 있다는 점에서 ping과 다릅니다."
  • "시간이 초과되거나 응답 할 때까지 하나의 대상으로 전송하는 대신 fping은 핑 패킷을 전송하고 라운드 로빈 방식으로 다음 대상으로 이동합니다."
  • "ping과는 달리 fping은 스크립트에서 사용되도록 만들어 졌으므로 출력을 구문 분석하기 쉽게 설계되었습니다."

1
잘 작동합니다. 감사합니다. 이것이 제가 찾고 있던 것입니다. 이 명령은 제대로 작동합니다. fping -c1 -t500 10.0.0.1 10.0.0.2 10.0.0.3 ... 모든 것이 0.5 초 동안 지속되며 모든 호스트에 대한 결과를 한 번에 얻습니다. 훌륭한 도구입니다. :-))
MiniQuark

37

와 관련된 솔루션을 찾는 사람들에게는 스위치를 ping사용하십시오 -i.

ping -i 0.2 www.google.com

또는 0.1을 사용하려면 루트로 실행해야합니다.

sudo ping -i 0.1 www.google.com

추가 유틸리티를 다운로드 할 필요가 없습니다.


4
나에게서 +1 이것은 인터넷 검색 "ping timeout"의 첫 번째 결과이며, 내가 찾던 것과 정확히 일치합니다.
Steven Jeffries

@StevenJeffries 여기 동일!
Luc

1
죽은 호스트의 경우이 솔루션은 약 1 초 후에 첫 번째 유용한 출력을 인쇄합니다. @MarcelBurkhard가 이미 언급했듯이 이것은 분명히 잘못된 대답입니다.
Victor Yarema

1
이 솔루션의 문제점은 -i 0.1이 100ms를 기다리지 않고 100ms 이상 걸리는 핑에 대해 더 오래 걸리므로 타이밍이 중단된다는 것입니다.
Llamageddon

2
이 답변은 정확하지 않습니다 ping. 응답을 기다리는 시간 이 변경되지 않습니다. 오히려 연속적인 핑을 더 빨리 보냅니다 ....
Mtl Dev

21

timeoutUbuntu / Debian 의 명령으로 짧은 시간 초과를 설정할 수 있습니다 .

timeout 0.2 ping -c1 fqdn || { do_work }

좋은 대답입니다! 나는 지금 : 타임 아웃 1 핑 -c 1 test.com
vrijdenker

1
내 타임 아웃 버전은 1 초만 허용합니다. timeout (GNU coreutils) 8.4.
slm

내가이 솔루션을 좋아, 그것은 다른 모든 명령에 적용 할 수 있습니다
datdinhquoc

@slm, 버전이 1 초 미만을 지원하지 않는 것이 이상합니다. 그것은 나를 위해 작동합니다 : DURATION is a floating point number with an optional suffix: 's' for seconds (the default),... 내 경우에 man timeout보고합니다 GNU coreutils 8.26. BWT, 우분투 17.04를 사용하고 있습니다.
Victor Yarema

시간 초과를 줄이려면 실제로 작동하는 유일한 방법입니다 (호스트가 응답하지 않음). 그러나 수학을 수행해야합니다. 시간 초과는 ping 명령의 "-c"* "-i"보다 커야합니다.
Marki

13

이 작업에 nmap을 사용하고 있습니다.

nmap -sP --max-retries=1 --host-timeout=1500ms 10.0.0.1

이에 대한 자세한 내용은 nmap 설명서 를 참조하십시오.


좋은 전화 .. 이것은 "굉장한"방법입니다 : D +1
Arenstar

안녕하세요. 방금 시도했지만 다음과 같은 오류 메시지가 나타납니다. "--host-timeout은 's', 'm', 'h'또는 'd'를 추가하여 한정하지 않으면 밀리 초 단위로 지정됩니다. 1500 밀리 초보다 커야합니다. "
MiniQuark은

문제가 분명하다고 생각합니다. 시간 초과는 1500ms보다 짧을 수 없습니다. 내가 생각하는 nmap 옵션 regaring parallelism을 찾아보아야합니다.
pacey

요청을 하나만 보내는 것 같습니다. 지속적인 결함 감지를 찾고 있습니다. Googling "ping millisecond timeout"에 의해 여기에 왔으며, nmap은 우분투 핑과 같은 인피니 핑을 제공합니까?
ThorSummoner 2016 년

타임 아웃을 1 초 미만으로 설정하면 @ victor-bjelkholm answer
thrau

4

모든 호스트가 물리적 LAN에있는 경우 arp ping 도구를 살펴볼 수도 있습니다. 동일한 작업을 수행하지만 레이어 2 arp 패킷을 사용하여 'ping'을 수행합니다. Arpping과 icmp ping의 조합 또는 실제로는 tcp ping을 사용하여 오류가 무엇인지 수집 할 수 있습니다. EXample은 tcp 스택 크래시입니다. 요즘에는 드물지만 머신이 ping에 응답하지 않기 때문에 머신 tcp 스택이 충돌했는지 알 수 있지만 arp (호스트의 다른 코드 조각)에 응답합니다. .

Arpping, tcpping 및 icmp ping의 조합을 사용하면 시스템의 서비스가 충돌했는지, tcp 스택이 충돌했는지 또는 시스템이 완전히 잠겨 있는지 확인할 수 있습니다. 이더넷 스위치를 관리 한 경우 실제 링크 데이터를 얻을 수 있으며 시스템이 실제로 켜져 있는지 또는 실제로 플러그가 뽑혔는지 알 수 있습니다. 우리는 머신들 (공공 실의 클라이언트들)이 꺼질 상황이 있었고, 그 데이터를 수집하고 랜 패킷에 대한 웨이크를 모아서 머신의 전원을 켰습니다. :-)

네트워크 사용량이 많은 경우 어떤 솔루션을 구축하든 어떤 종류의 qos 구현을 고려하여 모니터링 패킷이 네트워크에서 우선 순위를 가지므로 네트워크 혼잡으로 인해 측정 패킷이 손실되면 잘못된 경보가 발생할 수 있습니다. 패킷을 모니터링하기 위해 qos를 사용하는 경우 네트워크 활용에 대한 데이터 수집에 대해 고려해야합니다.

따라서 모니터링 솔루션을 원하는만큼 복잡하거나 쉽게 만들 수 있습니다. 우리는 가장 기본적인 모니터링 시스템조차 올바른 방향으로 나아가는 단계라는 것을 알았습니다. 최소한 일부 관리자는 머신을 감시하고 있습니다 :-).

행운을 빕니다!


3

@ jordon-bedwell은 큰 제안을합니다.

@ laszlo-valko https://stackoverflow.com/questions/20359487/why-does-ping-not-timeout-in-linux 는 ip 주소가 결정된 후에 만 ​​ping 시간 초과가 시작된다고 설명합니다. dns를 사용하고 워크 스테이션이 오프라인 인 경우 ping은 IP 주소를 판별 할 수 없으므로 false를 리턴하기 전에 대략 기본 20+ 초 동안 대기하는 것으로 보입니다.

Linux 'timeout'도구를 사용하면 도메인 이름으로 ping을 실행할 때 더 많은 제어 기능을 제공합니다.

고마워


2

Windows와 Debian에서 모두 -w 스위치를 사용하십시오 .

지정된 시간 (초)보다 적은 시간 내에 응답한다고 가정하면 컴퓨터가 전혀 응답하는지 확인하는 빠른 방법입니다.

ping -w 1 192.168.80.105

PING 192.168.80.105 (192.168.80.105) 56(84) bytes of data.

--- 192.168.80.105 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

1

보안 경보를 유발하지 않고 서브넷 (또는 그 일부)을 스캔 할 수 있고 약간의 추가 데이터를 신경 쓰지 않으면 Angry IP Scanner 가 빠르고 무료이며 상태별로 클릭하여 정렬 할 수 있으며보다 자세한 정보를 제공 할 수 있습니다 .


0

모든 호스트에 대해 병렬로 임시 파일로 출력하면서 백그라운드에서 핑을 시작해보십시오. 그런 다음 1 초 동안 잠자고, 여전히 실행중인 핑 프로세스를 종료하고 파일을 읽고 출력을 수집하십시오.


1
나는 그것이 효과가있을 것이라고 생각하지만 더 간단한 해결책을 찾고있었습니다. 어쨌든 고마워
MiniQuark은

이 방법은 확장되지 않습니다.
Synetech

0

시간 초과는 패킷을 얼마나 멀리 전송할 수 있는지 나타내는 정수 값입니다. 1 미만의 값은 의미가 없습니다. 값 1은 인접한 이웃 만 핑하고 있음을 나타냅니다.

작업 속도를 높이는 유일한 방법은 백그라운드 검사를 실행하고 결과를 수집하는 것입니다. 이것이 Nagios와 같은 도구입니다.


1
미안하지만, 이것이 사실이라고 생각하지 않습니다. 매뉴얼 페이지는 -W가 "응답을 기다리는 시간 (초)"을 지정한다는 것을 매우 분명합니다. 그것은 차원이 없으며 핑이 1 이하의 값을 존중하지 않기 때문에 (초기 질문) 하위 시간 초과는 의미가 없습니다. 나를 용서한다면, -W와 -t를 혼동 할 수 있습니다. 후자는 IP TTL (hop count) 필드를 설정합니다. IP TTL (hop count) 필드는 설명 된대로 작동하며 1 미만의 값은 실제로 의미가 없습니다.
MadHatter

-W는 핑 프로세스가 응답을 기다리는 시간이며 일반적으로 홉 수가 많을 때 홉 수 아래로 설정하는 것이 합리적 일 수 있습니다. 3 초가 지나면 일반적으로 재시도 상태가됩니다. 일부 도구는 대기 시간에 더 세밀한 타이머를 사용할 수 있지만 대부분의 핑 사용에는 초가 적당한 단위입니다.
BillThor

0

이런 식으로 시도해 볼 수 있습니다. 그러나 실행하는 데 15 분이 걸립니다.

a=258
while [ $a -ge 1 ]
do
    echo "10.0.0.$a"
    sudo ping -i 0.1 -c 1 "10.0.0.$a">>/home/$USER/output.log
   a=`expr $a - 1`
done
cat /home/$USER/output.log|grep -i "icmp_req=1"
cat /dev/null>/home/$USER/output.log

nmap작업에 적합한 도구 인 것 같습니다 .
kasperd


-1

ping에는 [-t timeout] 및 [-W waittime] 옵션이 있으므로 다음을 수행 할 수 있습니다.

핑 -c 1 -t 1 -W 1 google.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.