Цветной ping, или Делаем нашу жизнь чуть более красочной

28 января 2026
В эпоху сложных дашбордов и систем мониторинга простая утилита ping кажется цифровым динозавром. Она выполняет свою работу без лишних слов — или, скорее, без лишних цветов. Её вывод — это монотонный поток данных, где критическая ошибка выглядит так же буднично, как и успешный ответ.
Но что, если мы вдохнём в этого «динозавра» новую жизнь? Что, если каждая неудачная попытка достучаться до хоста будет зажигаться на экране, как аварийная сигнализация, а стабильное соединение — тихо светиться зелёным индикатором?
Ключ к этой трансформации лежит в ANSI Escape Codes — своеобразном «языке красок» для терминала. Это не магия, а давно существующий стандарт, который позволяет управлять цветом, позицией и стилем текста. В этой статье мы используем этот язык, чтобы создать цветную легенду для мира сетевой диагностики, сделав ping не просто инструментом, а наглядным помощником, который визуально сигнализирует о состоянии сети.

Что такое ANSI-коды?


ANSI-коды (ANSI escape codes/sequences) — это стандартные управляющие последовательности для терминалов, которые позволяют управлять выводом текста: цветом, позицией курсора, стилями и другими параметрами. В настоящее время они поддерживаются большинством терминалов (Linux/macOS терминалы, Windows Terminal, PowerShell 5.1+, ConEmu).
Вот некоторые примеры ANSI-кодов:
Базовые цвета текста (30-37)
o \033[30m  # Черный
o \033[31m  # Красный
o \033[32m  # Зеленый
o \033[33m  # Желтый
o \033[34m  # Синий
o \033[37m  # Белый
• Цвета фона (40-47, 100-107)
o \033[41m  # Красный фон
o \033[42m  # Зеленый фон
o \033[103m # Ярко-желтый фон
• Стили текста
o \033[0m   # Сброс всех атрибутов (самый важный!)
o \033[1m   # Жирный (bright/intensive)
o \033[2m   # Тусклый (dim/faint)
o \033[3m   # Курсив
o \033[4m   # Подчеркнутый
o \033[5m   # Медленное мигание
o \033[7m   # Инвертированные цвета
o \033[8m   # Скрытый текст
o \033[9m   # Зачеркнутый

Пример для использования в Windows

Приведем небольшой пример того, как можно разукрасить вывод утилиты ping в Windows. Для этого потребуется написать скрипт, так как стандартная команда ping не умеет выводить ANSI-коды автоматически.
Также стоит обратить внимание, что классическая командная строка (cmd.exe) не поддерживает ANSI-коды для окрашивания текста. Попытка их вывести приведёт к отображению служебных символов (например, ←[31m) вместо изменения цвета. Поэтому мы воспользуемся PowerShell.
Конструкция для изменения цвета выглядит следующим образом:

"$([char]27)[31mЭтот текст красный$([char]27)[0m"
• При помощи первой её части - "$([char]27) мы объявляем ESC — служебный символ (ASCII 27 или 0x1B).
• Далее идет [31m – это ANSI-код для красного цвета текста.
• [0m - код для сброса цвета к исходному.
В итоге получается следующий скрипт:
$target = "google.com" # Замените на нужный хост
ping $target | ForEach-Object {
    $line = $_
    if ($line -match "Превышен интервал ожидания|Request timed out|потеряно|host unreachable") {
        # Выводим строку красным
        "$([char]27)[31m$line$([char]27)[0m"
    }
    elseif ($line -match "TTL=|Ответ от") {
        # Выводим строку с успешным ответом зелёным (опционально)
        "$([char]27)[32m$line$([char]27)[0m"
    }
    else {
        # Остальные строки без изменений
        $line
    }
}

Сохраняем скрипт в файл с расширением .ps1 (например, ping-color.ps1).и запускаем в PowerShell. При необходимости можно менять значение в строке $target = "google.com" на нужное вам.
Результат:

Пример использования в Linux №1


Приведем аналогичный пример и для Linux. Самый простой способ - использовать grep с цветовым выделением:
ping google.com | grep --color=always -E "(Превышен интервал ожидания|Request timed out|unreachable|100% packet loss|timeout|no answer)" 
При использовании такого метода понадобится переменная GREP_COLORS. Для демонстрации была выполнена команда export, чтобы временно создать данную переменную и назначить ей значение.

Но можно пойти и по более сложному пути. Напишем свой собственный скрипт, в котором выделим информацию разными цветами:
#!/bin/bash

# Проверка аргументов
if [ $# -eq 0 ]; then
    echo "Использование: $0 <хост> [дополнительные опции ping]"
    exit 1
fi

host="$1"
shift  # Передаем остальные аргументы в ping

# Цветовые коды
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'  # No Color

echo -e "${BLUE}Pinging $host...${NC}"
echo "Нажмите Ctrl+C для остановки"
echo ""

ping "$host" "$@" | while IFS= read -r line; do
    # Обработка различных сообщений об ошибках
    if [[ "$line" =~ (Превышен интервал ожидания|Request timed out) ]]; then
        echo -e "${RED}[TIMEOUT] $line${NC}"

elif [[ "$line" =~ (Destination Host Unreachable|unreachable) ]]; then
        echo -e "${RED}[UNREACHABLE] $line${NC}"
    elif [[ "$line" =~ (100% packet loss) ]]; then
        echo -e "${RED}[COMPLETE LOSS] $line${NC}"
    elif [[ "$line" =~ (bytes from|ttl=|icmp_seq=.*ttl=) ]]; then
        # Успешный ответ - зеленым
        echo -e "${GREEN}$line${NC}"
    elif [[ "$line" =~ (ping statistics) ]]; then
        # Статистика - желтым
        echo -e "${YELLOW}$line${NC}"
    else
        # Остальной вывод без цвета
        echo "$line"
    fi
done

Не забудьте сделать файл исполняемым, после чего его можно использовать:
chmod +x colorping.sh
./colorping.sh google.com


Пример использования в Linux №2


Пройдем чуть дальше и представим, что нам нужно проверить сразу большое количество хостов. Воспользуемся ansible для решения данной задачи. В файле ping-check.yml будет реализована сама проверка, а сами хосты расположим в отдельном файле – hosts.txt.
Содержимое файла ping-check.yml:
---
- name: Компактная цветная проверка
  hosts: localhost
  gather_facts: false
  
  tasks:
    - name: Цветной вывод доступных и недоступных хостов
      ansible.builtin.shell: |
        exec > /dev/tty
        
        RED='\033[0;31m'
        GREEN='\033[0;32m'
        NC='\033[0m'
        
        echo "=== ДОСТУПНЫЕ ХОСТЫ (зеленые) ==="
        while IFS= read -r line; do
          host=$(echo "$line" | sed 's/#.*//' | xargs)
          [ -z "$host" ] && continue
          
          if ping -c 1 -W 1 "$host" > /dev/null 2>&1; then
            echo -e "${GREEN}✓ $host${NC}"
          fi
        done < hosts.txt
        
        echo ""
        echo "=== НЕДОСТУПНЫЕ ХОСТЫ (красные) ==="
        while IFS= read -r line; do
          host=$(echo "$line" | sed 's/#.*//' | xargs)
          [ -z "$host" ] && continue
          
          if ! ping -c 1 -W 1 "$host" > /dev/null 2>&1; then
            echo -e "${RED}✗ $host${NC}"
          fi
        done < hosts.txt
      args:
        executable: /bin/bash
      changed_when: false

Содержимое файла hosts.txt:
google.com
ya.ru
github.com
8.8.8.8
1.1.1.1
192.168.77.77
nonexistent.local
10.0.0.999
10.0.2.101
10.0.2.102

Результат выполнения проверки:


Заключение


ANSI-коды — это простой, но мощный способ визуализировать вывод в терминале. Как мы увидели на примере ping, цвет превращает скучный текст в интуитивный интерфейс: красный мгновенно показывает проблему, зелёный подтверждает успех.
Главная формула: \033[31m — красный, \033[0m — сброс цвета. Остальное — ваше творчество.
Добавляйте цвета в свои скрипты. Иногда лучшая система оповещения — это вовремя подсветившаяся красным строка в терминале.
А узнать больше про Linux, Ansible и многое другое можно у нас на курсах!
Автор статьи
Павел Груздев
Преподаватель:
направлений "Системное администрирование" и "Операционные системы"

Хотите преподавать в АйТи Клауд?

Если вы имеете компетенции и хотите работать тренером курсов в АйТи Клауд - оставьте ваши данные, мы свяжемся с вами!