ping 명령의 출력 필터링

ping 명령의 출력 필터링

나는 매우 간단한 작은 스크립트를 가지고 있습니다. 기본적으로 특정 도메인에 대해 ping을 수행합니다. 다음과 같습니다:

ping -c2 $1 | head -n4 

예를 들어 다음과 같이 인쇄됩니다.

PING google.com (172.217.17.206): 56 data bytes
64 bytes from 172.217.17.206: icmp_seq=0 ttl=55 time=2.474 ms
64 bytes from 172.217.17.206: icmp_seq=1 ttl=55 time=2.668 ms

그것은 나에게 문제가 되지 않습니다.

그러나 예를 들어 아시다시피 ping 명령이 ICMP 요청에 대한 응답을 반환하지 않는 경우가 있습니다. 예를 들어:

ping intel.com
PING intel.com (13.91.95.74): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
--- intel.com ping statistics ---

이런 일이 발생하면 스크립트가 몇 초 동안 멈춘 다음 계속 진행됩니다. 이런 일이 생기면 건너뛰고 넘어가는 방법을 생각하려고 노력해요. 실제로 이것이 가능한지 잘 모르겠습니다. 처음에는 "요청 시간 초과"를 나타내기 위해 grep으로 파이핑하거나 결과를 변수에 넣고 cat |

누구든지 방법을 생각할 수 있습니까? 요청 시간이 초과되면 실행을 건너뛸 수 있나요?

답변1

-W서버가 응답하지 않을 때 "몇 초" 동안 멈추기를 원하지 않는 경우 이 옵션을 사용하여 시간 초과를 추가하십시오. 예를 들어:

ping -c2 -W2 "$1"

-W2시간을 2초로 설정하세요. 필요에 맞게 한도를 변경하세요.

옆에

쉘 변수를 인용할 때 명시적으로 알고 싶지 않은 한 $1항상 큰따옴표로 묶으십시오."$1"분사그리고경로명 확장.

문서

에서 man ping:

-W timeout
응답을 기다리는 시간(초)입니다. 이 옵션은 응답이 없는 시간 초과에만 영향을 미칩니다. 그렇지 않으면 ping이 두 RTT를 기다립니다.

답변2

@ John1024의 답변은 Linux 배포판에 적합합니다. 귀하의 문제는 OS와 관련된 것이 아니므로 BSD 솔루션을 제공하겠습니다.

BSD의 ping명령(또한 Mac OS X)은 일부 타이밍 매개변수에 대해 더 세밀하게 세분화되어 있습니다. 대부분의 네트워크 연결의 왕복 시간은 1초 미만입니다. 실제로 많은 연결의 RTT는 1밀리초 미만입니다. FreeBSD 매뉴얼 페이지ping-W옵션이 밀리초 단위의 인수를 허용하도록 지정합니다.

-W 대기 시간

전송된 각 패킷에 대한 응답을 기다리는 시간(밀리초)입니다. 나중에 응답을 받으면 해당 패킷은 응답으로 인쇄되지 않고 통계 계산 시 응답으로 처리됩니다.

FreeBSD를 사용하는 동등한 명령은 다음 ping과 같습니다:

ping -c2 -W2000 "$1"

FreeBSD 매개변수의 해상도가 높을 수록 예상되는 실제 RTT에 더 가까운 값을 -W제공할 수 있습니다 .-W

호스트의 testhost명목 왕복 시간이 75밀리초인 것으로 알려져 있다고 가정합니다. 값이 -W80이면 다음이 생성됩니다.

jimsdesk : 14:45:58 /root# ping -W80 -c2 testhost
PING testhost (10.111.33.21): 56 data bytes
64 bytes from 10.111.33.21: icmp_seq=0 ttl=240 time=74.385 ms
64 bytes from 10.111.33.21: icmp_seq=1 ttl=240 time=74.478 ms

--- testhost ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 74.385/74.431/74.478/0.046 ms

50이라는 더 작은 -W값은 다음을 생성합니다.

# ping -W50 -c2 testhost
PING testhost (10.111.33.21): 56 data bytes

--- testhost ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss, 2 packets out of wait time
round-trip min/avg/max/stddev = 74.466/74.538/74.611/0.073 ms

다른 호스트가 testhost2더 가깝다고 가정하면 일반적으로 4밀리초 미만입니다. -W 허용 오차를 4밀리초로 더 엄격하게 지정하겠습니다. -c더 많은 패킷 이동 시간의 샘플링을 추가할 수도 있습니다 .

# ping -c10 -W4 testhost2
PING testhost2 (10.216.177.146): 56 data bytes
64 bytes from 10.216.177.146: icmp_seq=0 ttl=59 time=3.730 ms
64 bytes from 10.216.177.146: icmp_seq=1 ttl=59 time=3.899 ms
64 bytes from 10.216.177.146: icmp_seq=2 ttl=59 time=3.949 ms
64 bytes from 10.216.177.146: icmp_seq=3 ttl=59 time=3.668 ms
64 bytes from 10.216.177.146: icmp_seq=4 ttl=59 time=3.881 ms
64 bytes from 10.216.177.146: icmp_seq=5 ttl=59 time=3.725 ms
64 bytes from 10.216.177.146: icmp_seq=6 ttl=59 time=3.826 ms
64 bytes from 10.216.177.146: icmp_seq=8 ttl=59 time=3.726 ms
64 bytes from 10.216.177.146: icmp_seq=9 ttl=59 time=3.728 ms

--- testhost2 ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss, 1 packets out of wait time
round-trip min/avg/max/stddev = 3.668/3.867/4.539/0.241 ms

위의 출력은 10개의 패킷 중 9개가 4ms 이내에 왕복을 완료했지만 하나(seq 7)는 그렇지 않았음을 보여줍니다.

더 자세히 살펴보면 많은 LAN RTT가 1밀리초 미만이지만 항상 그런 것은 아닙니다. ping -c100 -W1 10.10.1.1로컬 네트워크에서 실행하면 다음이 생성됩니다.

...
--- 10.10.1.1 ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss, 10 packets out of wait time
round-trip min/avg/max/stddev = 0.664/1.081/18.547/1.898 ms

100개 패킷 중 90개는 밀리초 이내에 반환되었지만 나머지 10개 패킷은 반환되지 않았습니다.

대부분의 컴퓨터에서 로컬 호스트 인터페이스의 왕복 시간은 밀리초 미만입니다. 불행히도 FreeBSD는 ping소수 값을 허용하지 않습니다 -W.

# ping -c3 -W1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.020 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.020 ms

--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.018/0.019/0.020/0.001 ms

# ping -c3 -W.999 localhost
PING localhost (127.0.0.1): 56 data bytes

--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss, 3 packets out of wait time
round-trip min/avg/max/stddev = 0.020/0.022/0.025/0.002 ms

-W값이 .999로 구문 분석되는 것 같습니다 0.

관련 정보