Продвинутые параметры команды ping и практические применения
Теперь, когда вы понимаете основы работы команды ping
и способ интерпретации ее вывода, давайте рассмотрим некоторые продвинутые параметры и практические сценарии, где ping
полезен для сетевой диагностики.
Сначала создадим простой сценарий на языке shell, который поможет нам непрерывно отслеживать хост и записывать результаты в журнал:
nano ~/project/monitor_host.sh
Введите следующий сценарий в редактор:
#!/bin/bash
## Простой сценарий для сетевого мониторинга
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
Теперь запустим сценарий на несколько секунд, чтобы отслеживать DNS - сервер Google:
~/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, которое определяет, сколько сетевых прыжков (hops) может сделать пакет перед тем, как быть отброшенным.
- Flood ping (требует прав sudo):
sudo ping -c 10 -f 8.8.8.8
Параметр -f
позволяет отправлять пакеты как можно быстрее. Это полезно для стресс - тестирования, но следует использовать с осторожностью.
- Звуковой сигнал при ответе хоста:
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
Добавим DNS - сервер Google в нашу таблицу:
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
И добавим DNS - сервер Cloudflare:
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
Вы должны увидеть отформатированную таблицу со статистикой ping
для обоих DNS - серверов, которую можно использовать для сравнения их производительности.