ping 고급 옵션 및 실용적인 활용
ping 의 기본 사항과 출력을 해석하는 방법을 이해했으므로, 네트워크 진단을 위해 ping 이 유용한 몇 가지 고급 옵션과 실용적인 시나리오를 살펴보겠습니다.
먼저 호스트를 지속적으로 모니터링하고 결과를 기록하는 간단한 쉘 스크립트를 만들어 보겠습니다.
nano ~/project/monitor_host.sh
편집기에 다음 스크립트를 입력합니다.
#!/bin/bash
## Simple network monitoring script
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt
echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE
while true; do
ping -c 1 $HOST | grep "time=" >> $LOG_FILE
sleep $INTERVAL
echo "---" >> $LOG_FILE
done
Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고 Ctrl+X로 종료합니다.
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/monitor_host.sh
이제 Google 의 DNS 서버를 모니터링하기 위해 몇 초 동안 스크립트를 실행해 보겠습니다.
~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!
이것은 다음을 수행합니다.
- 백그라운드에서 모니터링 스크립트를 시작합니다.
- 10 초 동안 대기합니다.
- 스크립트를 중지합니다.
로그를 검토해 보겠습니다.
cat ~/project/ping_log.txt
타임스탬프와 함께 여러 ping 결과를 볼 수 있습니다.
이제 몇 가지 더 고급 ping 옵션을 살펴보겠습니다.
- TTL (Time To Live) 설정:
ping -c 4 -t 64 8.8.8.8
-t 옵션은 TTL 값을 설정하며, 이는 패킷이 폐기되기 전에 통과할 수 있는 네트워크 홉 수를 정의합니다.
- 플러드 ping (sudo 필요):
sudo ping -c 10 -f 8.8.8.8
-f 옵션은 가능한 한 빠르게 패킷을 보냅니다. 이는 스트레스 테스트에 유용하지만 주의해서 사용해야 합니다.
- 가청 ping:
ping -c 4 -a 8.8.8.8
-a 옵션은 호스트가 응답할 때 가청 벨 소리를 생성하며, 화면을 보지 않고 문제를 해결할 때 유용합니다.
- 데드라인으로 타이밍:
ping -c 4 -w 2 8.8.8.8
-w 옵션은 ping 이 전송된 패킷 수에 관계없이 중지될 데드라인을 초 단위로 설정합니다.
실용적인 문제 해결 시나리오를 살펴보겠습니다. traceroute 를 사용하여 대상에 대한 네트워크 경로를 간단하게 시각화해 보겠습니다 (ping 과 유사하게 작동하지만 패킷이 거치는 경로를 보여줍니다).
traceroute 8.8.8.8
이 명령어는 대상에 도달하기 위해 패킷이 통과하는 각 홉 (라우터) 을 보여줍니다. 다음과 같은 내용이 표시됩니다.
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (10.0.2.2) 0.113 ms 0.087 ms 0.083 ms
2 * * *
3 * * *
4 8.8.8.8 14.080 ms 13.849 ms 14.399 ms
별표 (*) 는 시간 초과 또는 traceroute 요청에 응답하지 않는 라우터를 나타냅니다.
이제 다양한 호스트에 대한 ping 결과를 문서화하기 위해 간단한 테이블을 만들어 보겠습니다.
echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt
Google 의 DNS 를 테이블에 추가해 보겠습니다.
result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
그리고 Cloudflare 의 DNS 를 추가합니다.
result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
결과 테이블을 살펴보겠습니다.
cat ~/project/ping_results.txt
두 DNS 서버에 대한 ping 통계가 포함된 형식화된 테이블이 표시되어 성능을 비교하는 데 사용할 수 있습니다.