Гид по технологиям

Как написать простой Ping Sweeper на Python

6 min read Python, Сеть Обновлено 01 Jan 2026
Как написать Ping Sweeper на Python
Как написать Ping Sweeper на Python

Двойной монитор с логотипом Python на переднем плане

Python — универсальный язык программирования, подходящий для создания GUI и CLI приложений. Для закрепления навыков эффективнее всего работать над мини‑проектами. Один из таких проектов — ping sweeper: утилита, которая опрашивает хосты в сети и сообщает, какие из них доступны.

Создание ping sweeper помогает повторить базовые концепции Python: ввод/вывод, циклы и функции, а также освежает знания по сетевым основам.

Что такое ping sweeper?

Ping sweeper — программа, которая принимает сетевой адрес, пингует хосты в этой подсети и выводит список «живых» и «неотвечающих» адресов. Это простой способ оценить количество онлайн‑устройств в локальной сети и получить их IPv4‑адреса.

Важно: обычный ping проверяет достижимость узла на сетевом уровне (ICMP Echo). Некоторые устройства или сети блокируют ICMP, поэтому отсутствие ответа не всегда означает, что устройство выключено.

Требования перед началом

  • Установлен Python (версия 3.x).
  • Терминал или командная строка с правами, достаточными для запуска утилиты ping (в некоторых системах требуется повышенный уровень).

Проверить установленную версию Python в терминале:

python --version

Если в системе используется python3 в качестве команды, можно проверить так:

python3 --version

Если команда не найдена — установите Python 3 и повторите проверку.

Минималистичный подход: только модуль os

В следующем примере мы используем только встроенный модуль os и системную утилиту ping. Такой вариант прост в понимании и не требует дополнительных зависимостей, но он по скорости и гибкости уступает решениям на базе subprocess, scapy или nmap.

План работы скрипта:

  • Принять на ввод IPv4‑адрес.
  • Выделить сетевой ID (первые три октета).
  • Перебирать значения последнего октета от 1 до 254.
  • Пинговать каждый адрес и выводить статус.

Приём и обработка ввода (пример кода)

import os

IP = input("[+] Введите IP-адрес хоста:\t")
print("[+] Запуск Ping Sweeper на " + IP)
dot = IP.rfind(".")
IP = IP[0:dot + 1]

Коротко: input() запрашивает ввод у пользователя; rfind() находит последний индекс точки, чтобы оставить первые три октета и двоеточие.

Сканирование хостов и определение статуса

Для Unix‑подобных систем (Linux, macOS) команда ping обычно поддерживает флаги -c (количество пакетов) и -w (таймаут). В цикле мы формируем адреса и вызываем ping через os.system:

for i in range(1, 255):
    host = IP + str(i)
    response = os.system("ping -c 1 -w 1 " + host + " >/dev/null")

    if response == 0:
        print(host + " is up")
    else:
        print(host + " is down")

Пояснение: os.system возвращает код завершения команды: 0 — успех (ответ получен), ненулевое значение — ошибка/нет ответа. Перенаправление вывода в /dev/null скрывает подробности пинга.

На Windows замените опции на -n и перенаправление на >nul:

response = os.system("ping -n 1 -w 1000 " + host + " >nul")

Здесь -n 1 отправляет один пакет, а -w 1000 устанавливает таймаут в миллисекундах.

Запуск скрипта

Выполнение скрипта сканирования в терминале

Запустите скрипт в терминале, перейдя в папку с файлом:

cd /directory/sweeper/
python3 sweeper.py

Введите IPv4‑адрес или подсеть, и скрипт начнёт опрашивать адреса.

Important: Запуск сетевого сканирования без согласия владельца сети может быть незаконен или нарушать правила использования. Всегда получайте явное разрешение перед сканированием чужих сетей.

Когда такой простой подход не подойдёт

  • Если у вас большая сеть: последовательный перебор медленный. Лучше использовать многопоточность или асинхронные операции.
  • Если сеть блокирует ICMP: ping не даст результата — надо использовать другие методы (TCP connect, ARP, SNMP, сервисы каталогов).
  • Для профессионального аудита и подробных данных лучше применять nmap или специализированные библиотеки (scapy).

Альтернативные подходы и улучшения

  1. Subprocess: использовать subprocess.run или subprocess.Popen вместо os.system, чтобы иметь более гибкий контроль ввода/вывода и таймаутов.
  2. Параллелизм: threading, multiprocessing или asyncio для ускорения проверки множества адресов.
  3. ARP‑сканирование: в локальной сети ARP быстрее и не зависит от ICMP.
  4. Использование scapy: пакет даёт гибкость для создания и обработки пакетов на уровне Ethernet/IP.
  5. Использование Nmap: обёртка python‑nmap позволяет запускать мощные сканы и получать структурированный вывод.

Примеры улучшений (без полного кода)

  • Потоковый пул: создать ThreadPoolExecutor с N воркерами и запускать функцию ping в потоках.
  • Batch‑пинг: отправлять по нескольку запросов параллельно и затем агрегировать результаты.
  • Ограничение по времени и повторные попытки: хранить таймауты и пытаться повторно при кратковременных сетевых проблемах.

Проверки и критерии приёмки

  • Скрипт принимает корректный IPv4‑адрес и извлекает первые три октета.
  • Скрипт корректно пингует адреса от .1 до .254 и выводит статус для каждого.
  • Скрипт корректно работает на указанной ОС при соответствующих изменениях флагов ping.
  • При запуске в локальной сети не вызывает существенной сетевой нагрузки.

Тестовые сценарии

  • Ввести корректный адрес 192.168.1.10 — ожидается запуск и вывод статуса 192.168.1.[1..254].
  • Ввести некорректный формат (например, 300.300.300.300) — скрипт должен либо корректно обрабатывать, либо информировать об ошибке (можно добавить валидацию).
  • Запуск в сети с заблокированным ICMP — все хосты будут помечены как down; протестировать альтернативный метод (TCP connect к порту 22/80).
  • Запуск на Windows — проверить замену флагов и перенаправления.

Роли и контрольный список перед деплоем

  • Разработчик: добавить валидацию ввода, логи, обработку исключений, возможность выбора режима (ICMP/TCP/ARP).
  • Системный администратор: убедиться в разрешениях, протестировать в ограниченной подсети, настроить лимиты параллелизма.
  • Тестировщик: прогнать тестовые сценарии, проверить поведение при сетевых задержках и потерях пакетов.

Безопасность и приватность

  • Нельзя запускать сканирование в чужих сетях без разрешения.
  • Логи со списком хостов и времён сканирования могут быть чувствительными — защищайте доступ к ним.
  • Если интегрируете скрипт в CI/CD или мониторинг, ограничьте права и доступ к результатам.

Совместимость и примечания по платформам

  • Linux/macOS: используйте параметры -c и -w; перенаправление в /dev/null.
  • Windows: используйте -n и -w (таймаут в мс); перенаправление >nul.
  • Убедитесь, что команда ping доступна в PATH и не требует специальных привилегий в вашей среде.

Краткий словарь терминов

  • ICMP: протокол интернет‑контроля пакетов, используется для ping (Echo Request/Reply).
  • ARP: протокол определения аппаратного адреса по IP в локальной сети.
  • Subnet/подсеть: часть сети, определяемая началом адреса и маской.

Часто задаваемые вопросы

Q: Нужны ли права суперпользователя для пинга?

A: Обычно нет — обычный пользователь может выполнять ping. Исключения зависят от политики ОС и настроек безопасности.

Q: Почему некоторые хосты не отвечают на ping, но доступны по TCP?

A: Администраторы могут блокировать ICMP (firewall). Для проверки доступности сервиса лучше выполнять TCP connect к соответствующему порту.

Q: Как ускорить сканирование?

A: Используйте многопоточность/асинхронность, ARP‑сканирование в локальной сети или специализированные инструменты (nmap).

Итог и рекомендации

Ping sweeper — отличный проект для изучения Python и сетевых основ. Для простых задач подойдёт минималистичный скрипт на базе os и системного ping. Для производительных и надёжных решений рекомендуется переходить на subprocess/scapy, использовать параллелизм и всегда соблюдать правовые ограничения при сканировании сетей.

Summary:

  • Используйте этот скрипт как обучающий пример.
  • Для боевого использования улучшайте обработку, добавьте параллелизм и логирование.
  • Всегда получайте разрешение на сканирование чужих сетей.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправить ошибку 0xc00000e9 в Windows 10
Windows

Исправить ошибку 0xc00000e9 в Windows 10

Добавить «Очистить папку» в контекст Windows 11
Windows

Добавить «Очистить папку» в контекст Windows 11

Отключить автоматическое выключение экрана в Windows 10
Windows

Отключить автоматическое выключение экрана в Windows 10

Точная перемотка медиа на iPhone
Советы iPhone

Точная перемотка медиа на iPhone

Как ускорить загрузки на Xbox
Xbox

Как ускорить загрузки на Xbox

Как пересылать SMS на email с Android
Android.

Как пересылать SMS на email с Android