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

Создание простого Ping Sweeper на Python — пошаговый мини-проект

6 min read Python проекты Обновлено 13 Apr 2026
Ping sweeper на Python — как написать
Ping sweeper на Python — как написать

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

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

Что такое ping sweeper

Ping sweeper — программа, принимающая адрес сети или одиночный IPv4‑адрес, посылающая ICMP‑эхо (ping) по всем хостам в подсети и выводящая списки доступных (alive) и недоступных (dead) хостов. Это быстрый способ оценить число онлайн‑устройств в локальной сети и получить их IPv4‑адреса.

Кратко: ping sweeper перебирает последние октеты адресов (обычно 1–254 в /24) и помечает ответившие машины.

Важно: сканируйте только сети, которым вы владеете или на которые у вас есть явное разрешение. Нелегитимные сканирования могут нарушать правила провайдера или законы.

Чему вы научитесь

  • приёмы разбора IPv4‑адресов и подсетей;
  • запуск внешней команды (ping) из Python;
  • обработка возвратных кодов и таймаутов;
  • простая многопоточность для ускорения сканирования;
  • кроссплатформенные нюансы (Linux/macOS vs Windows);
  • варианты повышения надёжности (subprocess, ipaddress, scapy, nmap).

Предварительные требования

Убедитесь, что у вас установлен Python 3.6+ и вы можете запускать его из терминала или командной строки:

python --version

На некоторых системах команда может быть python3:

python3 --version

Если команда не найдена — установите Python с официального сайта или через пакетный менеджер вашей ОС.

Минимальная реализация: разбор входа и простая логика

Разобьём задачу на части:

  1. Принять IPv4‑адрес от пользователя.
  2. Получить «сетевой ID» — первые три октета для /24 (например, 192.168.1.).
  3. Перебрать последние октеты 1–254, отправляя по одному ping на адрес и фиксируя статус.

Простейший фрагмент (оригинальная, минималистичная идея):

import os

IP = input("[+] Enter the Host IP Address:\t")
print("[+] Starting Ping Sweeper on " + IP)
dot = IP.rfind(".")
IP = IP[0:dot + 1]

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")

Пояснения:

  • input() получает строку от пользователя;
  • rfind(‘.’) возвращает индекс последней точки — с его помощью сохраняем первые три октета;
  • os.system() запускает команду ping; код завершения 0 означает успех (ответ);
  • параметры ping (-c и -w) и синтаксис перенаправления вывода (>/dev/null) применимы для Unix‑подобных систем.

Улучшенная кроссплатформенная реализация с subprocess и таймаутом

os.system полезен для простых задач, но subprocess даёт контроль над выводом, исключениями и возвратными кодами. Ниже — реализация, которая:

  • работает на Linux/macOS и Windows;
  • использует subprocess.run с подавлением вывода;
  • возвращает списки живых и мёртвых хостов.
import platform
import subprocess

def ping_host(host):
    system = platform.system().lower()
    if system == 'windows':
        cmd = ['ping', '-n', '1', '-w', '1000', host]
    else:
        # Linux/macOS: -c 1 (один пакет), -W 1 (таймаут в секундах на ответ)
        cmd = ['ping', '-c', '1', '-W', '1', host]

    try:
        result = subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        return result.returncode == 0
    except Exception:
        return False

if __name__ == '__main__':
    base = input('[+] Enter the Host IP Address: ')
    dot = base.rfind('.')
    base = base[:dot + 1]
    alive = []
    dead = []

    for i in range(1, 255):
        host = base + str(i)
        if ping_host(host):
            alive.append(host)
        else:
            dead.append(host)

    print('\nAlive hosts:')
    for h in alive:
        print(h)

    print('\nDead hosts:')
    for h in dead:
        print(h)

Примечание: опции ping могут отличаться в разных реализации (например, macOS, BSD, GNU), поэтому при переносе на новую платформу проверьте man ping.

Быстрее: многопоточность с ThreadPoolExecutor

Последовательное опрашивание 254 адресов может занять много времени. Простая оптимизация — параллелить запросы. Ниже пример с concurrent.futures:

from concurrent.futures import ThreadPoolExecutor, as_completed

def scan_network(base, workers=50):
    alive = []
    dead = []
    with ThreadPoolExecutor(max_workers=workers) as ex:
        futures = {ex.submit(ping_host, base + str(i)): i for i in range(1, 255)}
        for fut in as_completed(futures):
            i = futures[fut]
            host = base + str(i)
            try:
                if fut.result():
                    alive.append(host)
                else:
                    dead.append(host)
            except Exception:
                dead.append(host)
    return alive, dead

# использование:
# a, d = scan_network('192.168.1.')

Подсказки:

  • Значение workers стоит выбирать в зависимости от сети и машины (20–200). Слишком много потоков может вызвать нагрузку.
  • ThreadPool подходит для задач ввода/вывода (IO bound), таких как вызовы внешних команд.

Более корректный разбор подсетей: модуль ipaddress

Если на вход может поступать CIDR (например, 192.168.1.0/24), используйте модуль ipaddress:

import ipaddress

net = ipaddress.ip_network('192.168.1.0/24')
for host in net.hosts():  # пропускает сетевой адрес и broadcast
    print(str(host))

Это избавляет от ошибок парсинга и позволяет поддерживать другие маски сети.

Альтернативные подходы и когда они полезны

  • scapy — гибкая библиотека для низкоуровневой сетевой работы: позволяет формировать ICMP‑пакеты, проводить ARP‑сканирование для локальных сегментов и анализировать ответы. Требует прав администратора/рут.
  • nmap — готовый инструмент для быстрого и надёжного сканирования сети; лучше для глубокого аудита и опознания сервисов.
  • ARP‑ping — часто надёжнее внутри L2‑сети, т.к. маршрутизаторы/брандмауэры могут блокировать ICMP.

Когда простая пинг‑проверка не сработает

  • Хосты блокируют ICMP (файрвол/брандмауэр). Тогда ping вернёт «down», хотя устройство онлайн.
  • Маршрутизатор/провайдер фильтрует ICMP или снижает приоритет.
  • Сетевые устройства в гостевой/изолированной VLAN не отвечают на пинги с вашей точки.
  • Ограничения частоты на сетевых устройствах (rate limiting) — при агрессивном параллельном сканировании ответы могут теряться.

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

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

Пример вывода

[+] Starting Ping Sweeper on 192.168.1.10
192.168.1.1 is up
192.168.1.2 is down
192.168.1.3 is up
...

Alive hosts:
192.168.1.1
192.168.1.3

Dead hosts:
192.168.1.2
...

Дополнительные улучшения и опции

  • Сохранение результата в CSV/JSON для дальнейшего анализа.
  • Параметры командной строки: указать подсеть в CIDR, задать количество потоков, таймаут.
  • Обработка ошибок: логирование исключений, повтор попытки для ненадёжных хостов.
  • Throttling: вставлять короткие паузы между батчами для обхода rate limiting.
  • GUI/веб‑интерфейс: обёрнуть в простую веб‑страницу для просмотра списков.

План тестирования и критерии приёмки

Критерии приёмки:

  • Сканирование /24 должно проверять хосты 1–254 и возвращать списки alive/dead.
  • Скрипт корректно работает на Linux и Windows (базовая проверка).
  • Для известных ответивших хостов результат — alive; для отключённых — dead.
  • Ошибки внешних команд обрабатываются без падения приложения.

Тесты/сценарии:

  • Локальная сеть с 1–3 активными хостами — проверить правильность списков.
  • Блокировка ICMP на виртуальной машине — убедиться, что хост помечается как dead.
  • Передача сети в виде CIDR (192.168.0.0/24) — все адреса перебираются правильно.

Чеклисты для разных ролей

Для студента:

  • Python 3 установлен
  • Скрипт запускается из терминала
  • Результаты читаемы
  • Понимание, почему ping может возвращать false negative

Для системного администратора:

  • Согласование сканирования с политиками
  • Ограничение частоты и контроль потоков
  • Логирование и хранение результатов
  • Использование ARP/nmap при необходимости

Фактбокс: важные числа

  • IPv4 адрес состоит из 4 октетов (например, 192.168.1.10).
  • Сеть /24 обычно содержит 256 адресов, из которых 254 используются для хостов (1–254).
  • Типичный диапазон при переборе последних октетов: 1–254.

Когда использовать другие инструменты

  • Для разведки и определения сервисов используйте nmap.
  • Для точечных, локальных MAC‑уровневых проверок — ARP‑сканирование (например, arp-scan или scapy).
  • Для интеграции в сетецентричные приложения — применять Python‑модули (scapy, python-nmap) и обрабатывать результаты программно.

Короткая методология разработки (mini‑SOP)

  1. Определить целевой формат входа (IP или CIDR).
  2. Выбрать способ опроса (ping через subprocess, scapy, nmap).
  3. Реализовать базовую проверку и вывести результаты.
  4. Добавить многопоточность и тесты.
  5. Проверить кроссплатформенность и безопасность.
  6. Документировать и подготовить пояснения для пользователей.

Локальные нюансы и советы (для русскоязычных пользователей)

  • В Windows в командной строке вместо >/dev/null используется >nul.
  • Если скрипт запускается в корпоративной сети, уточняйте у сетевой команды, разрешено ли сканирование.
  • Для работы с raw‑сокетами (scapy) требуются права администратора/root.

Запуск скрипта ping sweep в терминале

Резюме

Создание ping sweeper — полезный мини‑проект для изучения Python и сетевых основ. Начните с простой реализации через subprocess, затем улучшайте: поддержка CIDR через ipaddress, многопоточность, запись результатов и обработка ошибок. При необходимости переходите к scapy или nmap для более глубокого анализа.

Важно: всегда соблюдайте правила и законы при сетевом сканировании.

Ключевые шаги: принять ввод, распарсить сеть, опросить адреса, обработать результаты, логировать и документировать. Удачи в развитии проекта!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Сохранить письмо Outlook в PDF — быстро и просто
Руководство

Сохранить письмо Outlook в PDF — быстро и просто

Редактирование PDF в Canva: быстро и просто
Руководства

Редактирование PDF в Canva: быстро и просто

Scribble на iPad: настройка и советы для Apple Pencil
iPad

Scribble на iPad: настройка и советы для Apple Pencil

Открывать PDF на последней странице — быстро и просто
Советы

Открывать PDF на последней странице — быстро и просто

Сноски и концевые сноски в Word: подробное руководство
Microsoft Word

Сноски и концевые сноски в Word: подробное руководство

Верификация страницы Facebook: руководство
Маркетинг

Верификация страницы Facebook: руководство