# Ping

Ping - это простая, широко используемая кроссплатформенная сетевая утилита для проверки доступности хоста в сети Internet Protocol (IP). Она работает путем отправки серии сообщений запроса эха протокола управления интернетом (ICMP) на целевой хост и ожидания ответа (или эхо-ответа ICMP).

Вы можете запустить тест ping, чтобы установить, может ли ваш компьютер связываться с другим компьютером (целевым хостом); это поможет вам определить:

1. Доступен ли целевой хост (активен) или нет.
2. Измерить время, за которое пакеты доходят до целевого хоста и возвращаются обратно на ваш компьютер (время задержки (rtt) в общении с целевым хостом) и
3. Потери пакетов выражаются в процентах.

Результатом является список ответов от целевого хоста вместе с временем, затраченным на последний пакет, чтобы дойти до целевого хоста и вернуться на ваш компьютер.

Также показывается статистическое резюме теста, обычно включающее количество переданных и полученных пакетов, процент потери пакетов; минимальное, максимальное и среднее время задержки и стандартное отклонение среднего (mdev). В случае неудачного теста ping вы увидите сообщения об ошибках в качестве выходных данных.

## Примеры команд ping в Linux
В этой статье показано несколько практических примеров команд ping для проверки доступности хоста в сети.

### Ping Domain или IP-адрес
 Вы можете запустить простой тест ping, чтобы увидеть, доступен ли целевой хост 3err0.ru или нет. Вы также можете использовать IP-адрес вместо имени домена, как показано.
```
>ping 3err0.ru
```
или
```
ping 109.248.207.129
```
Пример вывода:
```
ping 3err0.ru

Обмен пакетами с 3err0.ru [109.248.207.129] с 32 байтами данных:
Ответ от 109.248.207.129: число байт=32 время=39мс TTL=58
Ответ от 109.248.207.129: число байт=32 время=33мс TTL=58
Ответ от 109.248.207.129: число байт=32 время=37мс TTL=58
Ответ от 109.248.207.129: число байт=32 время=32мс TTL=58

Статистика Ping для 109.248.207.129:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 32мсек, Максимальное = 39 мсек, Среднее = 35 мсек
```
Из результатов вышеуказанной команды следует, что ping-тест прошел успешно и не было потеряно ни одного пакета. Важно обратить внимание на время в конце каждого ответа в выводе ping-теста.

Предположим, вы проводите тестирование ping на своих серверах, тогда значение времени здесь имеет большое значение, в зависимости от типа приложения, которое вы запускаете на сервере.

Например, если у вас есть веб-приложение, где один запрос пользователя приводит к выполнению множества запросов к базе данных для генерации результатов на пользовательском интерфейсе, то меньшее время ping для этого конкретного сервера означает, что больше данных передается без задержки, и наоборот.

### Echo Request
Это параметр для команды ping, который используется для отправки серии запросов ICMP ECHO_REQUEST на целевой хост и ожидания ответа ICMP ECHO_REPLY (или ECHO_RESPONSE).

В Linux можно указать количество ECHO_REQUEST, которые должны быть отправлены, после чего ping завершится, используя флаг -c, как показано (в этом случае ping-тест остановится после отправки 5 пакетов).

В Windows аналогичная функциональность реализуется с помощью параметра -n, например, чтобы отправить 5 пакетов, нужно использовать команду ping с параметром "-n 5".

Пример вывода:
```
ping -c 5 3err0.ru
PING 3err0.ru (109.248.207.129) 56(84) bytes of data.
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=1 ttl=61 time=97.1 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=2 ttl=61 time=97.1 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=3 ttl=61 time=96.7 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=4 ttl=61 time=96.8 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=5 ttl=61 time=96.9 ms

--- 3err0.ru ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 9ms
rtt min/avg/max/mdev = 96.708/96.920/97.089/0.421 ms
```
### Установка интервала времени и таймаута
Флаг -i позволяет установить интервал времени в секундах между отправкой каждого пакета при использовании команды ping, по умолчанию этот интервал равен одной секунде.

В Windows аналогичный параметр для установки интервала между отправкой пакетов называется -w, и он устанавливает время ожидания ответа на каждый пакет, в миллисекундах. Например, чтобы установить интервал в 2 секунды в Windows, нужно использовать команду ping с параметром "-w 2000".
```
ping -i 3 -c 5  3err0.ru
PING 3err0.ru (109.248.207.129) 56(84) bytes of data.
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=1 ttl=61 time=96.9 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=2 ttl=61 time=97.1 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=3 ttl=61 time=96.7 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=4 ttl=61 time=96.7 ms
64 bytes from 109.248.207.129.yadc.ru (109.248.207.129): icmp_seq=5 ttl=61 time=97.2 ms
```

### Атака DoS с помощью флуд-пинга, также известная как "Ping of Death"
Для тестирования отклика сети в условиях высокой нагрузки можно использовать так называемую "флуд-пинг" (ping flooding), при которой запросы отправляются максимально быстро с помощью ключа -f. Однако этот метод может быть использован для запуска атаки типа DoS (отказ в обслуживании) и поэтому доступен только для пользователя root. Если вы не являетесь root, используйте команду sudo для получения прав root.
```
sudo ping -f 3err0.ru
```
или с указанием интервала времени
```
sudo ping -f -i 3 3err0.ru
```

### Пингование широковещательного адреса в локальной сети (LAN)
Вы можете включить широковещательный пинг, используя опцию -b, которая получит ответ от всех IP-адресов, подключенных к вашей локальной сети (LAN).
```
ping -b 192.168.0.0
```
### Установка значения TTL

Чтобы ограничить количество сетевых прыжков (TTL - время жизни) для пакетов, используйте опцию -t. Вы можете установить любое значение между 1 и 255; различные операционные системы устанавливают различные значения по умолчанию.

Каждый маршрутизатор, который получает пакет, вычитает из счетчика, по крайней мере, единицу, и, если счетчик по-прежнему больше нуля, маршрутизатор пересылает пакет на следующий узел. В противном случае он отбрасывает его и отправляет ICMP-ответ обратно на ваш компьютер.

В Windows параметр для установки значения TTL в пинге также называется "-t".
```
ping -t 10 3err0.ru
```
### Установка размера пакета

Размер пакета по умолчанию должен быть достаточным для тестирования ping, однако, вы можете изменить его, чтобы соответствовать вашим конкретным потребностям тестирования. Вы можете указать размер полезной нагрузки в количестве байт, используя опцию -s, что приведет к общему размеру пакета, равному указанному значению плюс 8 дополнительных байт для заголовка ICMP.

Для Windows параметр -l используется для установки размера пакета в байтах.
```
ping -s 1000 3err0.ru
```
### Установка Ping Preload

Если установлен параметр preload, ping отправляет столько пакетов, не дожидаясь ответа. Обратите внимание, что только root может выбрать preload больше 3, в противном случае используйте команду sudo, чтобы получить права root.

На Windows этот параметр не поддерживается.
```
sudo ping -l 5 3err0.ru
```
### Установка времени ожидания

Также можно установить время ожидания ответа в секундах с помощью опции -w (для Windows) или -W (для Linux), как показано в примере.
```
ping -W 10 3err0.ru
```
### Отладка ICMP-пакетов
Опция -d позволяет включить отладку деталей IP-пакетов, как показано.
```
ping -d 3err0.ru
```
### Подробный вывод
Вы можете включить подробный вывод, используя флаг -v, как показано ниже.
```
ping -v 3err0.ru
```
### Проверка доступности порта
Вы можете проверить доступность определенного порта на хосте, используя опцию -p в команде ping. Например, для проверки доступности порта 80 на хосте www.google.com, вы можете использовать следующую команду:
```
ping -p 80 3err0.ru
```

### Изменение источника IP-адреса
Вы можете изменить источник IP-адреса, используемый при отправке запросов ping, с помощью опции -I.
```
ping -I 192.168.1.10 3err0.ru
```

### Использование IPv6
Вы также можете использовать команду ping для проверки доступности хоста по IPv6-адресу. Для этого используйте опцию -6. Например, чтобы проверить доступность хоста по IPv6-адресу fe80::1, вы можете использовать следующую команду:
```
ping -6 fe80::1
```