Команда PING это, пожалуй, самая используемая сетевая утилита командной строки. PING присутствует во всех версиях всех операционных систем с поддержкой сети и является простым и удобным средством опроса узла по имени или его IP-адресу.
Для обмена служебной и диагностической информацией в сети используется специальный протокол управляющих сообщений ICMP (Internet Control Message Protocol). Команда ping позволяет выполнить отправку управляющего сообщения типа Echo Request (тип равен 8 и указывается в заголовке ICMP-сообщения) адресуемому узлу и интерпретировать полученный от него ответ в удобном для анализа виде. В поле данных отправляемого icmp-пакета обычно содержатся символы английского алфавита. В ответ на такой запрос, опрашиваемый узел дожжен отправить icmp-пакет с теми же данными, которые были приняты, и типом сообщения Echo Reply (код типа в ICMP-заголовке равен 0) . Если при обмене icmp-сообщениями возникает какая-либо проблема, то утилита ping выведет информацию для ее диагностики.
1. Описание команды PING.
1.1. Формат командной строки:
C:\ ping [-t] [-a] [-n число] [-l размер] [-f] [-i TTL] [-v TOS] [-r число] [-s число] [[-j списокУзлов] | [-k списокУзлов]] [-w таймаут] конечноеИмя
1.2. Параметры:
- -t — Непрерывная отправка пакетов. Для завершения и вывода статистики используются комбинации клавиш Ctrl + Break (вывод статистики и продолжение), и Ctrl + C (вывод статистики и завершение).
- -a — Определение адресов по именам узлов.
- -n число — Число отправляемых эхо-запросов.
- -l размер — Размер поля данных в байтах отправляемого запроса.
- -f — Установка флага, запрещающего фрагментацию пакета.
- -i TTL — Задание срока жизни пакета (поле «Time To Live»).
- -v TOS — Задание типа службы (поле «Type Of Service»).
- -r число — Запись маршрута для указанного числа переходов.
- -s число — Штамп времени для указанного числа переходов.
- -j списокУзлов — Свободный выбор маршрута по списку узлов.
- -k списокУзлов — Жесткий выбор маршрута по списку узлов.
- -w таймаут — Максимальное время ожидания каждого ответа в миллисекундах.
2. Примеры использования.
2.1. Эхо-запрос к узлу с именем google.com с параметрами по умолчанию — количество пакетов равно 4, длина массива данных = 32 байта:
C:\ ping google.com
2.2. Пинг узла ya.ru с использованием протокола Ipv6:
C:\ ping -6 ya.ru
2.3. Выполнить пинг с определением имени конечного узла по его адресу:
C:\ ping -a 192.168.1.50
2.4. Пинг узла computer от источника 192.168.0.1:
C:\ ping -s 192.168.0.1 computer
Используется когда на компьютере имеется несколько сетевых интерфейсов.
2.5. Пинг с таймаутом ожидания равным 5 секунд ( по умолчанию — 4 сек):
C:\ ping w 5000 ya.ru
2.6. Опрос узла ab57.ru 5000 раз, пакетами с данными длиной в 1000байт:
C:\ ping -n 5000 -l 1000 ab57.ru
Допустимая максимальная длина данных — 65500.
2.7. Пинг с запретом фрагментации пакета:
C:\ ping -n 1 -l 3000 -f ya.ru
2.8. Отправить 1 эхо-запрос на узел ya.ru с отображением первых 3-х переходов по маршруту:
C:\ ping -n 1-r 3 ya.ru
2.9. Пинг с указанием времени жизни TTL=5:
C:\ ping -i 5 ya.ru
Если для достижения конечного узла потребуется большее количество переходов по маршруту, то маршрутизатор, прервавший доставку ответит сообщением ”Превышен срок жизни (TTL) при передаче пакета.”
3. Применение PING для пошаговой диагностики проблем доступа в Интернет.
В качестве домашней сети используется наиболее распространенная сеть с IP-адресами 192.168.1.0 /255.255.255.0 . Речь идет об IPv4 – IP протоколе версии 4, где для адресации используется 4 байта. IP- адреса принято представлять в виде десятичных значений байтов, разделяемых точками. Каждое устройство в сети должно иметь свой уникальный адрес. Кроме адреса, в сетевых настройках используется маска сети ( маска подсети). Маска имеет такой же формат представления, как и адрес. Комбинация адреса и маски определяет диапазон адресов, которые принадлежат локальной сети — 192.168.1.0-192.168.1.255. Первый и последний адреса диапазона не назначаются отдельным сетевым устройствам, поскольку используются в качестве адреса сети и широковещательного адреса. Обычно адрес роутера делают равным 192.168.1.1 или 192.168.1.254. Это не является обязательным стандартом, но на практике используется довольно часто. Единичные биты маски определяют постоянную часть IP-адреса сети, а нулевые — выделяемые отдельным узлам. Значение 255 — это байт с установленными в единицу битами. Маска сети служит средством определения диапазона IP-адресов, принадлежащих локальной сети. Устройства с такими адресами достижимы локально, без использования маршрутизации. Маршрутизация — это способ обмена данными с сетевыми устройствами не принадлежащими к данной локальной сети через специальное устройство — маршрутизатор ( router, роутер ). Маршрутизаторы представляют собой специализированные компьютеры с несколькими сетевыми интерфейсами и специализированным программным обеспечением обеспечивающим пересылку IP-пакетов между отправителем и получателем, находящимися в разных сетях. В такой пересылке могут участвовать несколько маршрутизаторов, в зависимости от сложности маршрута. Домашний роутер — простейшая разновидность маршрутизатора, который обеспечивает пересылку пакетов, адресованных во внешние сети следующему по маршруту маршрутизатору в сети провайдера. Следующий маршрутизатор проверяет достижимость адреса конечного узла локально, и либо пересылает ему данные, либо передает их следующему маршрутизатору в соответствии с таблицей маршрутов. Так происходит до тех пор, пока данные не достигнут получателя или закончится время жизни пакета.
Команда PING можно использовать для диагностики отдельных узлов.
3.1. Это пинг петлевого интерфейса:
C:\ ping 127.0.0.1
Должен выполняться без ошибок, если установлены и находятся в работоспособном состоянии сетевые программные компоненты.
3.2. Пинг на собственный адрес или имя:
C:\ ping свой IP или имя
Должен завершаться без ошибок, если установлены все программные средства протокола IP и исправен сетевой адаптер.
3.3. Пинг должен выполняться, если исправна сетевая карта компьютера, исправен кабель или беспроводное соединение, используемые для подключения к роутеру и исправен сам роутер:
C:\ ping IP-адрес роутера
Кроме того, настройки IP должны быть такими, чтобы адрес компьютера и роутера принадлежали одной подсети. Обычно это так, когда сетевые настройки выполняются автоматически средствами DHCP-сервера маршрутизатора.
3.4. Выполнить опрос узла с именем yandex.ru:
C:\ ping yandex.ru
Если опрос завершается с ошибкой, то причиной может быть не только отсутствие связи с маршрутизатором провайдера, но и невозможность определения адреса узла yandex.ru из-за проблем с программными средствами разрешения имен.
3.5. Выполнить опрос узла с IP-адресом 8.8.8.8:
C:\ ping 8.8.8.8
Если опрос по адресу выполняется без ошибок, а опрос по имени завершается сообщением о неизвестном узле, то проблема в разрешении имен. Причиной может быть неработоспособность DNS-сервера провайдера. В этом случае, можно попробовать сменить его в настройках сетевого соединения на публичные DNS сервера Google с адресами 8.8.4.4 и 8.8.8.8. Также, проблема может быть вызвана плохим качеством связи с провайдером, что сопровождается слишком большим временем отклика и пропаданием пакетов.
3.6. выполнять ping до нажатия комбинации CTRL+C:
C:\ ping -t yandex.ru
При нажатии CTRL+Break — выдается статистика и опрос узла продолжается.
3.7. Выполнить ping 1000 раз с использованием сообщений, длиной 500 байт:
C:\ ping -n 1000 -l 500 192.168.1.1
Пинг пакетами стандартной длины в 32 байта может выполняться без ошибок, а на длинных — с ошибками, что характерно для беспроводных соединения при низком уровне сигнала в условиях интенсивных помех.
3.8. Выполнить ping 1 раз (ключ -n 1), выдавать маршрут для первых 9 переходов (-r 9), ожидать ответ 1 секунду (1000мсек):
C:\ ping -n 1 -r 9 -w 1000 yandex.ru
В результате выполнения данной команды отображается и трассировка маршрута:
Обмен пакетами с yandex.ru [87.250.251.11] с 32 байтами данных: Ответ от 87.250.251.11: число байт=32 время=36мс TTL=54 Маршрут: 81.56.118.62 -> 81.56.112.1 -> 10.109.11.9 -> 10.109.11.10 -> 195.34.59.105 -> 195.34.52.213 -> 195.34.49.121 -> 195.34.52.213 -> 87.250.239.23 Статистика Ping для 87.250.251.11: Пакетов: отправлено = 1, получено = 1, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 36мсек, Максимальное = 36 мсек, Среднее = 36 мсек
В данном примере, между отправителе и получателем пакетов выстраивается цепочка из 9 маршрутизаторов. Нужно учитывать тот факт, что в версии утилиты ping.exe для Windows, число переходов может принимать значение от 1 до 9. В случаях, когда этого значения недостаточно, используется команда tracert.
Отсутствие эхо-ответа не всегда является признаком неисправности, поскольку иногда по соображениям безопасности, некоторые узлы настраиваются на игнорирование эхо-запросов, посылаемых PING. Примером может служить узел microsoft.com и некоторые маршрутизаторы в сетях небольших провайдеров.
4. Использование PING в командных файлах.
4.1. Нередко, команда PING используется для организации задержек в командных файлах. Выполняется пингование петлевого интерфейса с указанием нужного значения счетчика пакетов, задаваемого параметром -n. Посылка эхо-запросов выполняется с интервалом в 1 секунду, а ответ на петлевом интерфейсе приходит практически мгновенно, поэтому задержка будет приблизительно равна счетчику минус единица. Задержка в 10 секунд:
C:\ ping -n 11 127.0.0.1
4.2. Команда PING используется в командных файлах для определения доступности IP-адресов. Поскольку, результат опроса никак не отражается в переменной ERRORLEVEL , то вместо ее анализа используется поиск определенных признаков в данных стандартного вывода PING. Если внимательно посмотреть на сообщения программы ping.exe при опросе доступного и недоступного узла, то можно заметить, что они значительно отличаются. Ping на несуществующий адрес:
C:\ ping 456.0.0.1
Ответ на такую команду может отличаться от конкретной версии утилиты, и может быть приблизительно таким:
При проверке связи не удалось обнаружить узел 456.0.0.1. Проверьте имя узла и повторите попытку.
Ping на адрес узла yandex.ru:
C:\ ping yandex.ru
Ответ на ping доступного узла:
Обмен пакетами с yandex.ru [87.250.250.11] по 32 байт:
Ответ от 87.250.250.11: число байт=32 время=10мс TTL=55
Таким образом, для решения задачи определения доступности узла в командном файле, достаточно проанализировать характерные слова в выводе ping.exe при успешном ответе. Наиболее характерно в данном случае наличие слова TTL. Оно никогда не встречается при возникновении ошибки и состоит всего лишь из символов английского алфавита. Для поиска «TTL» в результатах ping.exe удобнее всего объединить ее выполнение в цепочку с командой поиска строки символов FIND.EXE (конвейер ping и find). Если текст найден командой FIND, то значение переменной ERRORLEVEL будет равно 0:
ping -n 1 COMPUTER | find /I "TTL" > nul if %ERRORLEVEL%==0 goto LIVE ECHO computer недоступен подпрограмма обработки недоступного состояния ... Exit :LIVE - начало подпрограмм ы обработки состояния доступности узла ... ...
4.3. В более простом варианте можно использовать команды:
- Команда ECHO выполняется, если значение ERRORLEVEL, установленное FIND равно 0, т.е узел yandex.ru отвечает на ping:
C:\ ping yandex.ru |find "TTL=" && ECHO Yandex pingable
- Команда ECHO выполняется, если значение ERRORLEVEL, установленное FIND не равно 0, т.е. узел Server64 не ответил на ping:
C:\ ping Server64 |find "TTL=" || ECHO Server64 not pingable