Linux ping show loss

Команда ping в Linux

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

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

Как работает ping?

Утилита ping — это очень простой инструмент для диагностики сети. Она позволяет проверить доступен удаленный хост или нет и все. Для этого утилита проверяет, может ли хост отвечать на сетевые запросы с помощью протокола ICMP.

Надеюсь, не нужно говорить, что все данные по сети передаются в виде небольших пакетов. Программа передает небольшой пакет с данными ICMP и ожидает получить обратно пакет ответа, если получает, то считается что удаленный узел доступен. ICMP или Internet Control Message Protocol — это надстройка над протоколом IP, которая используется для передачи служебных сообщений и сообщений и ошибках.

Протокол ICMP может передавать только два типа пакетов — это сообщения с отчетами про ошибки и сообщения запросов. В свою очередь, сообщения запросов делятся на:

  • Сообщение эхо-запрос;
  • Сообщение эхо-ответ.

Попытаемся разобраться что делает команда ping. Итак, когда вы отправляете запрос ping удаленному узлу, утилита устанавливает для каждого пакета уникальный идентификатор, а также TTL и время отправки пакета. Если хост доступен, он отправляет ответ, на основе времени отправки утилита может вычислить время прохождения пакета туда и обратно. Затем отправляется следующий пакет. В конце рассчитывается общее количество отправленных и принятых пакетов, процент потерь и другие данные.

Команда Ping

Теперь нам осталось немного попрактиковаться. Но перед тем, как мы перейдем к практике давайте рассмотрим синтаксис команды и ее опции. Синтаксис довольно прост:

$ ping опции адрес_узла

Формат команды ping очень прост. В качестве адреса узла можно передавать как ip адрес, так и доменное имя. Опции настраивают поведение утилиты. Рассмотрим основные из них:

  • -4 — использовать только ipv4 (по умолчанию);
  • -6 — использовать только ipv6;
  • -A — адаптивный режим, время между отправками пакета адаптируется к времени передачи и приема пакета, но не меньше чем 200мс;
  • -b — разрешить ping широковещательного адреса;
  • — количество пакетов, которые нужно отправить;
  • -D — выводить время в виде UNIX timestamp;
  • -f — режим флуда, в этом режиме пакеты передаются без задержек, может использоваться для совершения DoS атак на отдельные узлы. Количество точек, которые выводит утилита обозначает количество потерянных пакетов;
  • -i — интервал в секундах между отправкой пакетов;
  • -I — использовать этот сетевой интерфейс для отправки пакетов;
  • -l — режим перегрузки, отправляется очень много пакетов и система не следит за ответными пакетами;
  • -n — не получать домены для ip адресов;
  • -r — игнорировать таблицы маршрутизации и отправить пакет на указанный интерфейс;
  • -s — размер одного пакета;
  • -t — установить TTL вручную;
  • -v — более подробный вывод.
Читайте также:  Windows 10 home xbox one

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

Как пользоваться Ping?

Для проверки работоспособности сети часто используется программа ping любого сайта, который всегда доступен, например, google.com или еще проще и короче ya.ru. Вам будет достаточно передать утилите в параметрах этот адрес, она сама найдет ip и сделает все нужное:

Как я и писал выше, для каждого пакета выводится уникальный идентификатор icmp_seq, количество узлов до целевого узла ttl и время, потраченное на доставку пакета time. Чтобы остановить ping нажмите сочетание клавиш Ctrl+C. В конце утилита вывела общую статистику:

  • packets transmitted — отправлено пакетов;
  • received — получено пакетов;
  • packet loss — процент потерянных пакетов;
  • time — обще время работы;
    rtt min/avg/max/mdev — минимальное время/среднее время/максимальное время/квадратичное отклонение.

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

Точно так же как мы выполняем ping для домена, можно указать ip адрес напрямую. Это позволяет проверить есть ли сеть когда неверно настроены серверы DNS. Например:

Следующий вид отправки ping сообщений, это ping флуд. С помощью таких пакетов можно выполнить нагрузочное тестирование канала или даже заглушить интернет соединение на одной из машин. Но эти функции можно использовать только с правами суперпользователя. Для организации ping флуда укажите опцию -f:

По умолчанию, в обычном режиме, каждый следующий пакет отправляется, когда получен ответ на предыдущий. Но вы можете сами установить интервал между отправкой пакетов -i:

ping -i 0.2 losst.ru

Здесь программа ping выполняет так званный, настраиваемый флуд, вы указываете с какой интенсивностью нужно отправлять пакеты. С помощью опции -D вы можете увидеть Unix Timestamp для каждого сообщения:

Выводы

В этой статье мы рассмотрели что такое команда ping в linux, как ее использовать основные параметры и методы применения. Этот очень простой инструмент можно применять для тестирования неполадок сети и их исправления. В этом плане утилита может стать незаменимой.

Источник

PING — показ потерянных пакетов

Собственно, сабж. Интересует способ мониторинга потерянных пакетов при пинге «в реальном времени», а не в статистике. Google с ответом не помог, равно как и опция -v, а городить костыли в виде пинга по одному пакету циклично мне не очень хочется.

А стандартным ping не получится?

Честно говоря, не в курсе.

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

Читайте также:  Windows не может определить оборудование

И с mtr удобно смотреть именно глазами.

сам просил «в реальном времени»

Я имел в виду что-то вроде

пакет 1 — ОК пакет 2 — ОК пакет 3 — не ОК пакет 4 — ОК

на хорошие пакеты печатает точку, на потерянные Lost N packets

Интересует способ мониторинга потерянных пакетов при пинге «в реальном времени», а не в статистике. а городить костыли в виде пинга по одному пакету циклично мне не очень хочется.

У тебя противоречивые требования. Хочешь в реальном времени, в виде «пакет 1 — ОК пакет 2 — ОК пакет 3 — не ОК пакет 4 — ОК», но не «по одному пакету циклично»

Сам понимаешь что сказал? В общем иди-ка ты пиши себе все сам, чудак.

=) Спасибо тебе за помощь. Но мне нужно что-то вроде

Но это те самые костыли, которые я не хочу использовать, но получается нужный мне вывод:

Не самый подходящий вариант

А то что обычный ping root-SUID’ный тебя устраивает?

А если выполнять на машине без рутовых прав.

надоело за ручку школоту водить.

Спасибо за внимание!

Толстовато. И, да, не стыдно не знать. Я не только про себя.

Как ТС написал PING — показ потерянных пакетов (комментарий) ему нужен вывод с тайм-штампами. Стандарнтый ping такой функционал не обеспечивает, а root’овых прав у ТС нет.

вот это на самом деле самый интересный момент во всей этой сантабарбаре.
99 из 100, что оно ему на самом деле не нужно, и товарищ просто не с того бока к задаче подошёл

Нужно. Например, для статистики.

Вы работаете на большом андронном коллайдере, что статистика на уровне отдельного ICMP пакета кому-то интересна?
Давайте высокоуровневое описание задачи

Давайте низкоуровневое: падает, например, Интернет. Я замечаю, что сеть отваливалась, но время проверить не могу (дома меня нет). А это требуется моему провайдеру. Не обязательно слать пакеты каждую секунду. С другой стороны, если мой скрипт видит, что пакеты теряются, он может трассировать маршрут. Или мне смс кинуть, чтоб я звонил в саппорт прова и уже по факту заявлял о проблеме.

опять какой то сумбур. тебе нужно видеть в котором часу не пинговался хост?

Нет такого ключа. Есть

тебе нужно видеть в котором часу не пинговался хост?

Мне нужно видеть потерянные пакеты. Действие на это событие можно любое повесить. Провайдер просто для примера.

Система мониторинга? Nagios.

То есть fping не подходит — нужно что-то дефолтное, скрипт на перле — потому что рута нужно, а вот развернуть систему мониторинга-это ОК.

Во, это почти то, что надо. Осталось к этому прикрутить звонок в техподдержку провайдера и другие организации. 🙂

это что за линупс такой? андроид чтоле?

Ну да, похоже что линуксовый пинг не умеет выводить сообщения как на виндовом пинге например. Придется изобретать велосипед. Я бы сделал не пинг, а через socket.connect (дабы не требовать рутовых прав)

Читайте также:  Как убрать этот компьютер с рабочего стола windows

а вот такое бывает в случае таймаута

Потеря одого пакета вобще ничего не означает, это норма в больших сетях.

Если по потери нескольких пакетов подряд нужно делать какое-то действие («смс кинуть»), то и дописывайте свой скрипт, который постоянно вызывает ping. Запустили ping, посмотрели exit-code, выполнили действия. Это проще и понятнее, чем непрерывно парсить вывод команды и по строкам «timeout» делать действия.

1. Пингуем, при этом на вывод идет только инфа о потерях. 2. Считаем каким-нибудь wc потеряные пакеты. 3. Набираем определенное количество потерянных пакетов — алярм.

Странная у вас версия. Вроде, должно быть 20100418. А старые версии ping (до 20100214) не знают этой опции. В RHEL и ubuntu 10.04LTS именно они.

Я проверял сейчас на

Дома Debian Squeeze стоит, может там пойдет.

-D вам даст вывод тайм-штампа, но не сообщения о потери пакета.

Вот такой вариант запуска ping -f будет выводить FAIL на каждый потеряный пакет, что подойдёт для счётчика, но без тайм-штампа:

Хотя если просто суммировать потерянные пакеты без ограничения интервала времени, то рано или поздно любое число насуммируется.

падает, например, Интернет. Я замечаю, что сеть отваливалась

такие тесты есть в любой системе мониторинга

как вариант: заводите dummy интерфейс, ставите его вторым маршрутом в Интернет с большой метрикой. Как только в него попёр трафик — значит основный канал имеет большие проблемы.

кстати данные можно снимать и с основного канала: как только входящий поток минимален и в логах прут ошибки DNS — канал лежит.

snmpd и средства мониторинга (nagios к примеру).

Мне не нужен мониторинг. Я об этом уже говорил.

Он тебе не нужен, но делаешь ты именно его.

скрипт на перле — потому что рута нужно

Тебе осталось доустановить perl-suid и радоваться на серверах без рутового доступа.

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

Я хочу пинговать 1 узел, зачем мне мониторинг? Может мне еще БД разворачивать чтоб 1 номер телефона записать?

То есть для установки мне рутовый доступ не нужен? Расширение мне тоже не требуется. Спасибо!

А тебе и на серваках без рута делать нечего, игры в песочнице 🙂

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

Я хочу пинговать 1 узел, зачем мне мониторинг?

так что-же вы хотите на самом деле ? знать работает-ли конкретный ваш канал, работает ли этот самый отдельный узел, или собрать статистику по направлению сервер-узел ??

ЗЫ. наличие/пропадение/отсутствие пинга одного узла ничего не говорит о работоспособности канала провайдера. (искл.-единственный шлюз).

ЗЫЫ. Готовых, подчас неплохих, скриптов проверки работы шлюза в разделе Admin — по паре штук в месяц (как правило связанны с переключением шлюзов/маршрутов). Ищите и обрящите 🙂

Интересует способ мониторинга потерянных пакетов при пинге «в реальном времени», а не в статистике.

Источник

Оцените статью