Команда 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 — более подробный вывод.
Теперь, когда мы рассмотрели основные параметры команды 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 больше к трейсам относится, что, конецно, является разновидностью пинга, но зачем усложнять)
И с 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 (дабы не требовать рутовых прав)
а вот такое бывает в случае таймаута
Потеря одого пакета вобще ничего не означает, это норма в больших сетях.
Если по потери нескольких пакетов подряд нужно делать какое-то действие («смс кинуть»), то и дописывайте свой скрипт, который постоянно вызывает 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 — по паре штук в месяц (как правило связанны с переключением шлюзов/маршрутов). Ищите и обрящите 🙂
Интересует способ мониторинга потерянных пакетов при пинге «в реальном времени», а не в статистике.
Источник