Найти в Дзене
Эникей на передержке

2ping - прокачанный ping | Linux 🐧

Оглавление

Продолжаем знакомиться с полезными командами Linux, сегодня немного затронем тему сетевого траблшутинга.

Утилита присутствует в стандартных репозиториях Debian и доступна для запуска от имени обычного пользователя:

sudo apt update && sudo apt install 2ping

Описание

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

Запуск прослушивателя

На стабильном хосте запускаем прослушиватель с помощью команды
'2ping --listen' . Он не отправляет никаких запросов и настроен только на приём пакетов.

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

Периодический вывод краткой статистики

Можно настроить вывод краткой статистики через определённый промежуток времени, указанный в параметре '--stats':

Вывод краткой статистики каждые 10 секунд
Вывод краткой статистики каждые 10 секунд

Запуск проверки

На машине, которую необходимо протестировать, запускаем '2ping <IP/host>':

Чтобы закончить отправку пакетов, используйте Ctrl+C
Чтобы закончить отправку пакетов, используйте Ctrl+C

IPv4 / IPv6

Если хотите использовать конкретную версию протокола, укажите её с помощью параметров --ipv4 (краткая форма -4) или --ipv6 (краткая форма -6).

Ограничить число запросов

По умолчанию число отправляемых запросов не ограничено. Чтобы установить лимит, используйте параметр '--count=<кол-во>' или его краткую форму '-c <кол-во>':

При достижении лимита, отправка запросов завершится автоматически
При достижении лимита, отправка запросов завершится автоматически

Ограничить работу утилиты по времени

При нестандартной задержке между отправкой пакетов (об этом ниже) будет удобнее ограничить работу команды не по количеству отправленных пакетов, а по времени. За это отвечает параметр --deadline (-w), он останавливает работу утилиты по истечении указанного количества секунд:

Установка дедлайна в 3 секунды
Установка дедлайна в 3 секунды

Тихий вывод

Если хотите видеть лишь результат, используйте параметр --quiet, он же -q:

Отображение суммарной информации о десяти отправленных пакетах
Отображение суммарной информации о десяти отправленных пакетах

Звуковое сопровождение

Добавьте параметр '-a', чтобы каждый раз при получении пакета воспроизводился системный звуковой сигнал.

Адаптивный пинг

По умолчанию утилита выжидает одну секунду перед тем, как отправить следующий запрос. С помощью параметра '--adaptive' или '-A' можно ускорить передачу пакетов в сетях с низким значением rtt.

Будьте осторожны с этим параметром, т.к. чем ниже rtt, тем больше пакетов будет передано:
Около тысячи запросов за менее чем 2 секунды
Около тысячи запросов за менее чем 2 секунды

Режим флуда

Необходимо максимально ускорить отправку пакетов? Используйте параметр '--flood' или '-f':

Будьте осторожны при использовании этого параметра
Будьте осторожны при использовании этого параметра

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

Чтобы увеличить интервал между запросами, используйте параметр
'--interval=<секунды>' или краткую форму '-i <секунды>':

Перед отправкой первого запроса ожидания не происходит
Перед отправкой первого запроса ожидания не происходит

Адрес интерфейса

Для проверки конкретного адреса, укажите его у клиента или слушателя в параметре '--interface-address=IP' или '-I IP'.

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

Порт

По умолчанию утилита использует порт 15998, но вы можете установить своё значение с помощью параметра --port. Для установки случайного порта используйте --port=-1

SRV-записи DNS

Чтобы использовать SRV-запись, укажите на клиенте параметр '--srv'.

При использовании --srv значение порта берётся из DNS-записей.

Отправка запросов без ожидания ответа

Чтобы отправить несколько пакетов не дожидаясь подтверждения, используйте параметр --preload=<кол-во>, он же -l <кол-во>:

Во втором случае 2 пакета отправились сразу, остальные 2 через указанный интервал
Во втором случае 2 пакета отправились сразу, остальные 2 через указанный интервал

Ожидание потерянных пакетов

По умолчанию 2ping ждёт 10 секунд, прежде чем запросить информацию о потерянном пакете. Указать свой интервал можно с помощью параметра
'--inquire-wait'.

Эмуляция потери пакетов

Параметр --packet-loss позволяет сэмулировать потерю входящих:исходящих пакетов в процентах. Если указано одно число, оно будет применено и к входящим, и к исходящим пакетам:

Эмуляция потери пакетов
Эмуляция потери пакетов

Управление данными

Минимальный размер пакета

С помощью параметра --min-packet-size можно установить минимальное значение полезных данных в байтах (по умолчанию: 128). Если полезные данные окажутся меньше установленного значения, в конец пакета будет добавлено заполнение, шаблон которого устанавливается с помощью параметра --pattern.

Для совместимости ICMP можно использовать параметр --packetsize-compat, он же -s. В этом случае минимальный размер пакета будет на 8 байт больше установленного числа.

Шаблон заполнения

С помощью параметра --pattern или -p можно указать какими байтами будет заполнен пакет, например, -p ff дополнит пакет последовательностью из единиц.

Параметр лишь дополняет часть пакета, не трогая данные полезной нагрузки. Если полезные данные превышают минимальный размер пакета, установленный с помощью параметра --min-packet-size, шаблон заполнения игнорируется.

Максимальный размер пакета

Максимальный размер пакета задаётся параметром --max-packet-size. Значение по умолчанию: 512 байт, минимум: 64 байта.

Если полезные данные превысят установленный размер, будет предпринята попытка разбить их по пакетам.

Расшифровка пакетов

Параметр --verbose (-v) расшифрует информацию об отправленных и полученных пакетах:

Расшифровка пакетов
Расшифровка пакетов

Подробный вывод

Редим отладки позволяет вывести максимальное количество информации о пакетах (параметр --debug):

Сравнение вывода verbose и debug
Сравнение вывода verbose и debug

Прикрепить сообщение к пакету

Используйте параметр --notice для своих комментариев:

Сообщение "HELLO, BOBA!"
Сообщение "HELLO, BOBA!"

Шифрование пакетов

Авторизация на основе ключа

Укажите ключ в параметре --auth, чтобы хэшировать информацию о пакетах.

На клиенте и на прослушивателе должен быть задан один и тот же ключ:
С неуказанным или неправильным ключом пакеты отбрасываются
С неуказанным или неправильным ключом пакеты отбрасываются

Алгоритм хэширования

По умолчанию используется хэш-функция md5. Всего поддерживаются следующие хэш-функции: hmac-md5, hmac-sha1, hmac-sha256 и hmac-sha512. Установить любую из них позволяет параметр --auth-digest:

Показаны варианты использования разных алгоритмов хэширования (красный), разных ключей с одинаковыми алгоритмами хэширования (жёлтый), одинаковые ключи и алгоритмы хэш-функций (зелёный)
Показаны варианты использования разных алгоритмов хэширования (красный), разных ключей с одинаковыми алгоритмами хэширования (жёлтый), одинаковые ключи и алгоритмы хэш-функций (зелёный)

Шифрование пакетов

Для включения шифрования укажите значение ключа в параметре --encrypt:

Шифрование с помощью ключа
Шифрование с помощью ключа
Для использования этой возможности потребуется установленный пакет python3-pycryptodome. Шифрование происходит с помощью алгоритма hkdf-aes256-cbc.

Заключение

На этом знакомство с 2ping подошло к концу. Если я не затронул какие-то важные моменты при использовании этой команды, буду рад их услышать от вас в комментариях.

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

---

Другие статьи по теме Linux:

Linux | Общее | Эникей на передержке | Дзен

Поддержать материально:

-20