Практические примеры команды Ping в Linux

Незаменимым инструментом для администрирования сети является команда Ping в Linux. Возможно, вы уже использовали ping ранее для базовой диагностики, но что делает эта команда?

Команда ping отправляет запросы протокола управления сообщениями Интернета (ICMP) на удаленные или локальные хосты и ожидает ответа. Отсутствие ответа может указывать на проблему с соединением или с самими хостами.

Продолжайте читать и исследуйте практические способы использования команды ping в Linux!

Предварительные условия

Этот учебник будет практическим демонстрационным. Если вы хотите следовать за нами, убедитесь, что у вас есть компьютер с Linux и интернет-соединением. В этом учебнике используется компьютер с Ubuntu 20.04.

Также убедитесь, что вы уже открыли сеанс терминала на своем компьютере с Linux.

Проверка подключения к локальной сети

Представьте, что вы разрабатываете веб-приложение. Тест завершается неудачей, когда вы пытаетесь получить доступ к приложению через адрес обратной петли хоста (127.0.0.1). Прежде чем начать отчаянно решать проблему приложения, убедитесь, что протокол TCP/IP работает внутренне с помощью команды ping.

Адреса обратной петли по умолчанию – 127.0.0.1 и 0:0:0:0:0:0:0:1 (или ::1) для IPv4 и IPv6 соответственно.

Чтобы проверить подключение к адресу обратной петли, выполните следующую команду ping, за которой следует адрес обратной петли в терминале. Эта команда демонстрирует самое базовое использование команды ping в Linux.

ping 127.0.0.1

Если адрес обратной петли работает правильно, вы должны увидеть аналогичный вывод, как на скриншоте ниже.

Pinging the loopback address (127.0.0.1)

В качестве альтернативы, пингуя имя хоста localhost, вы должны получить тот же результат, потому что оно разрешается в адрес обратной петли по умолчанию.

Pinging the loopback address (localhost)

Чтобы завершить выполнение команды ping, нажмите CTRL+C в терминале. В противном случае команда ping будет выполняться непрерывно.

Примечание: Не нажимайте CTRL+Z для остановки команды ping. Это приведет к остановке команды, но процесс останется запущенным в фоновом режиме.

Terminating the ping command in Linux

Понимание вывода команды Ping в Linux

Прежде чем двигаться дальше, вы бы получили выгоду от явного понимания вывода, а не только его интерпретации как “работает”. Обратитесь к изображению ниже и расшифровке значений, которая следует за ним.

Ping command output
  • A (bytes) – Shows the ICMP echo request (packet) size in bytes.
  • B (from) – Shows the target host’s IP address from where the ping command receives the response.
  • C (icmp_seq) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value shows icmp_seq=N, where N is the order number.
  • D (TTL) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255.
  • E (time) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that the time values are less than 0.1 milliseconds in this example since the target is the same machine. The time value increases naturally when the ping destinations are remote or have an internet address.
  • F (statistics) – Shows the summary and statistics of the ping command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.

Принудительное использование версии протокола Интернета

Команда ping по умолчанию использует IPv4. Но что если вы тестируете совместимость вашего приложения с IPv6? Чтобы заставить команду ping использовать IPv6, вы должны указать опцию -6 в вашей команде ping в Linux, как показано в коде ниже.

ping -6 localhost

Как видно ниже, ответ показывает, что ответ поступил от адреса обратной связи IPv6 (::1).

Pinging the IPv6 loopback address

Вместо опции -6 опция -4 заставляет ping использовать IPv4. Но поскольку ping по умолчанию использует IPv4, обычно нет необходимости указывать опцию -4.

Ограничение количества ответов

В предыдущих примерах вам приходилось нажимать CTRL+C, чтобы завершить команду ping, потому что в противном случае она выполнялась бесконечно.

Опция -c позволяет указать количество ответов, которые команда ping получает, прежде чем она остановится. Зачем использовать эту опцию? В некоторых случаях вам может потребоваться проверить, как ваша система реагирует на 10, 100, 1000 пакетов ICMP и так далее.

Запустите следующую команду, чтобы отправить пять пакетов ICMP на целевой хост. Замените 5 на количество ICMP-ответов, которые вы хотите получить, прежде чем остановиться.

ping -c 5 localhost

Как видно ниже, команда ping остановилась после пятого запроса (icmd_seq=5), и вам не нужно было нажимать CTRL+C для ее завершения.

Ping with a limited request count

Настройка интервала запросов

Предположим, вы хотите проверить сетевое соединение между двумя устройствами, и у одного из них низкая пропускная способность. В этом случае вы можете увеличить интервал между каждым запросом, чтобы второе устройство имело достаточно времени для обработки текущего пакета ICMP.

Команда ping по умолчанию отправляет следующий ICMP-запрос через одну секунду после завершения предыдущего. Чтобы изменить задержку, вы должны указать параметр -i, за которым следует значение задержки в секундах.

Например, выполните следующую команду ping, чтобы отправить пять ICMP-запросов с интервалом в две секунды между запросами.

ping -c 5 -i 2 localhost

Еще один пример: выполните следующую команду ping, чтобы отправить пять ICMP-запросов с интервалом в полсекунды между каждым запросом.

ping -c 5 -i 0.5 localhost

Сравнение результатов обеих команд с разными интервалами показывает разницу между общими значениями time.

Comparing ping results with different intervals

Моделирование атаки типа “Флуд”

A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.

Вы можете моделировать флуд-атаку, чтобы проверить, как ваша система реагирует на атаку. Но не волнуйтесь, симуляция флуд-пинга контролируется, и вы можете остановить ее в любое время, нажав CTRL+C.

Выполните следующую команду на своем локальном компьютере, чтобы увидеть, сколько запросов ваше устройство может обрабатывать в секунду. Параметр -f означает отправку нескольких пакетов пинга быстро и без произвольных ограничений.

Замените “localhost” на IP-адрес или имя хоста приложения, которое вы хотите протестировать. Этот пример моделирует флуд-пинг только на локальном хосте. Дайте команде пинга работать примерно пять секунд, а затем нажмите CTRL+C, чтобы завершить ее.

Команда ping -f требует, чтобы вы были пользователем root или имели привилегии sudo.

ping -f localhost

Как видно ниже, команда ping смогла отправить и получить 124,685 ICMP-пакетов за 4276 миллисекунд с 0% потери пакетов. Довольно неплохо, да? Но в реальной жизни вы обязательно столкнетесь с потерей пакетов. Потеря пакетов неизбежна, потому что сеть не идеальна.

Simulating a ping flood attack

Проверка подключения к Интернету

Каждый ведь как-то пользуется интернетом, верно? Предположим, вы пытаетесь загрузить веб-сайт в своем браузере, но время загрузки страницы кажется медленным. Этот симптом указывает на то, что разрешение DNS работает, но что-то влияет на скорость сети.

Диагностика проблемы без сторонних инструментов включает использование команды ping. Использование команды такое же, как при тестировании подключения к локальной сети. Но вместо того, чтобы направить запрос на адрес обратной связи, вы бы указали общедоступный IP-адрес или веб-адрес.

Запустите нижеуказанную команду, чтобы проверить доступность внешнего общедоступного веб-сайта. Замените adamtheautomator.com на другой веб-адрес, как вам угодно.

ping -c 5 adamtheautomator.com

Сразу же вы заметите, что значение времени относительно выше, чем при пинге локального хоста. Это увеличение времени обусловлено тем, что целевой адрес adamtheautomator.com находится не на том же хосте и даже не в той же сети.

В предыдущих шагах ваша команда ping была успешной, но в реальной жизни бывают моменты, когда команда ping не удается по многим возможным причинам.

Вот некоторые общие ошибки и способы их устранения.

  • Недоступен целевой хост – Эта ошибка означает, что к целевому хосту нет маршрута. Эта ошибка может возникнуть, если хост или домен недоступен.
  • Время запроса истекло – Эта ошибка означает, что запрос к целевому хосту занял слишком много времени (более 4 секунд или 4000 миллисекунд), и соединение истекло. Эта ошибка может возникнуть, если целевой хост слишком загружен для ответа, если брандмауэр блокирует соединение или если есть проблемы с сетевым оборудованием (кабель, маршрутизатор и т. д.).
  • Неизвестный хост – Эта ошибка означает, что DNS не может преобразовать имя хоста в IP-адрес. Убедитесь, что вы вводите правильное имя хоста. Если вы подозреваете, что ваш маршрутизатор может работать неправильно, попробуйте перезапустить его.
  • Истекло время ожидания TTL в транзите – Эта ошибка означает, что ICMP-запрос истек до достижения цели. Ваш пакет ping уменьшается до нуля (0) до достижения целевого хоста. В большинстве случаев причиной этой ошибки может быть неправильная конфигурация вашей таблицы маршрутизации. Рассмотрите возможность проверки вашей таблицы маршрутизации, чтобы выявить проблему.

В случае, если вы этого не знали: игроки называют пинг своим соединением с игровым сервером в игровом сообществе. Низкий пинг означает более отзывчивое соединение, особенно в быстрых играх. Высокий пинг указывает на менее отзывчивое соединение и может делать игру медленной.

Некоторые поставщики услуг Интернета (ISP) вместо сообщения об ошибке возвращают страницу поиска, когда вы пытаетесь подключиться к веб-сайту, который не существует. В результате вы можете получить ложноположительный результат, потому что вместо ошибки вы получаете ответ.

Сохранение результата выполнения Ping в файл

Большинство команд, если не все, возвращают результаты только на экран, и команда ping в Linux не исключение. В терминале Linux есть встроенные операторы перенаправления вывода, которые позволяют перенаправлять вывод в файл.

Эти операторы перенаправления следующие:

символ (>), который перезаписывает содержимое файла, и;

символ (>>), который добавляет вывод к существующему содержимому.

Но зачем вам нужно сохранять результаты ping в файл? Прежде всего для ведения записей и последующего анализа с использованием текстового редактора или парсера логов.

Вы также можете использовать программу электронных таблиц для создания графика, показывающего, как меняется время ping со временем.

Выполните следующую команду, чтобы сохранить результат выполнения ping в файл. Эта команда записывает все стандартные выводы команды ping в файл с именем log.txt на диске.

ping -c 10 localhost > log.txt

Пока выполняется команда ping, вы заметите, что на экране нет вывода.

Теперь откройте файл log.txt в текстовом редакторе, таком как nano. Или отобразите содержимое файла, выполнив команду cat.

# Откройте в текстовом редакторе
nano log.txt
# ИЛИ
# Отобразите содержимое на экране
cat log.txt
Opening the ping output file in a text editor
Displaying the ping output file contents on the screen

Заключение

На этом уроке вы узнали, как использовать команду ping Linux с различными практическими примерами. Вы также узнали, как сохранить вывод ping в файл на диске, чтобы вы могли проанализировать его позже.

На этом этапе у вас должно быть хорошее представление о том, как работает команда ping и как она может быть полезна. Но прежде чем вы отправитесь пинговать все подряд, есть несколько правил, которые вы должны включить в ваши группы безопасности, чтобы разрешить трафик ICMP.

Спасибо за чтение и счастливого обучения!

Source:
https://adamtheautomator.com/ping-command-in-linux/