Назад к обновлениям
New releaseAug 22, 2026

Packet-Sniffer v4.0.0

Сниффер сетевых пакетов на основе raw-сокетов, который захватывает и разбирает TCP/IP-пакеты с сетевых интерфейсов для анализа безопасности и образовательных целей.

Поделиться

RootWire

CI PyPI Python Version OS License

Монитор сетевого трафика для GNU/Linux — ранее известный как Packet-Sniffer. Кадры захватываются с сетевого интерфейса через raw-сокет, декодируются слой за слоем с помощью библиотеки NETProtocols и выводятся в реальном времени, записываются в pcap или передаются потоком в формате JSON:

[>] Frame #4 at 15:42:07 (wlan0, 74 bytes)
    [+] Ethernet 3c:7c:3f:1a:be:22 -> 9c:1e:95:aa:01:5f
        EtherType: IPv4
    [+] IPv4 192.168.1.96 -> 142.250.79.78
        TTL: 64 | Flags: Don't fragment (DF) | Total Length: 60 | ID: 39754
        Protocol: TCP | Checksum: 0x2b51
    [+] TCP 51888 -> 443
        Flags: 0x002 (SYN) | Seq: 3598801521 | Ack: 0
        Window: 64240 | Checksum: 0x2008 | Options: 20 bytes

Декодер охватывает Ethernet, ARP, IPv4 (опции и фрагменты), IPv6 включая заголовки расширения (отчёт MLD отображает полную цепочку Hop-by-Hop), ICMPv4/v6, TCP (смещения полезной нагрузки с учётом опций) и UDP. Повреждённые или усечённые кадры диагностируются вместо того, чтобы прерывать захват, неизвестные протоколы корректно завершают цепочку, а ограничение в 16 слоёв не позволяет искусственным стекам заголовков расширения усиливать нагрузку — захват переживает всё, что доставляет сеть.

Установка

pipx install rootwire        # или: uv tool install rootwire

Или запустите из клона с помощью uv:

git clone https://github.com/EONRaider/RootWire.git
cd RootWire
uv sync

Использование

rootwire [-h] [-i INTERFACE] [-r FILE] [-w FILE] [--json] [-d] [--version]

options:
  -i, --interface   интерфейс для захвата кадров (по умолчанию: все интерфейсы)
  -r, --read FILE   воспроизвести кадры из классического pcap-файла вместо живого
                    захвата (права не требуются)
  -w, --write FILE  также записывать каждый захваченный кадр в классический pcap-файл
  --json            один объект NDJSON на кадр в stdout (баннер и
                    статистика остаются в stderr): можно передавать напрямую в jq
  -d, --data        также отображать необработанную полезную нагрузку каждого кадра
                    (игнорируется с --json)

Статистика захвата — кадры, байты, кадры/с, счётчики повреждённых/усечённых кадров, итоги по протоколам — выводится в stderr по завершении захвата. Некоторые любимые комбинации:

sudo rootwire -i eth0 -w session.pcap   # захват с сохранением доказательств
rootwire -r session.pcap                # просмотр позже, без root
rootwire -r session.pcap --json | jq .  # машинно-читаемый анализ

Живой захват требует raw-сокета, что в Linux означает root (sudo rootwire -i eth0) или предоставление интерпретатору возможности CAP_NET_RAW. Воспроизведение файлов с -r никогда не требует привилегий. Из клона запускайте как sudo .venv/bin/python -m rootwire.

Как это работает

capture.py выдаёт необработанные кадры из сокета AF_PACKET (или pcap.py воспроизводит их из файла — оба источника взаимозаменяемы); decoder.py проходит по цепочке протоколов каждого кадра, формируя неизменяемый DecodedFrame; выходы — экранный рендерер, поток NDJSON, pcap-запись, сборщик статистики — потребляют каждый кадр через один небольшой интерфейс Output. Полное описание, включая то, почему память остаётся стабильной при длительных захватах и как добавить выход, находится в ARCHITECTURE.md.

Всё, кроме raw-сокета, работает в любой ОС, поэтому набор тестов — который включает корпус из 65 кадров реального захваченного трафика, воспроизводимого через весь конвейер — не требует ни root, ни Linux:

uv run pytest

План развития

  • Фильтрация BPF (фильтры захвата на стороне ядра)
  • Ядерные временные метки (SO_TIMESTAMPNS) и сервисное использование с чистым завершением по SIGTERM
  • Отображение проверки контрольных сумм (библиотека уже их вычисляет)

Правовое уведомление

Использование кода, содержащегося в этом репозитории, частично или полностью, для воздействия на цели без предварительного взаимного согласия является незаконным. Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе.

Разработчики не несут ответственности и не отвечают за неправомерное использование или ущерб, причинённый любым кодом, содержащимся в этом репозитории, в любом случае, если случайно или иным образом он будет использован угрозой или несанкционированным лицом как средство для компрометации безопасности, конфиденциальности, целостности и/или доступности систем и связанных с ними ресурсов. В этом контексте термин «компрометация» далее понимается как использование эксплуатации известных или неизвестных уязвимостей, присутствующих в указанных системах, включая, но не ограничиваясь, реализацией средств контроля безопасности, осуществляемой человеком или электронными средствами.

Использование этого кода только одобряется разработчиками в тех случаях, которые непосредственно связаны с образовательными средами или авторизованными тестами на проникновение, чья заявленная цель состоит в поиске и устранении уязвимостей в системах, ограничивая их подверженность компрометациям и эксплойтам, применяемым вредоносными агентами, как определено в их соответствующих моделях угроз.

Лицензия

AGPL-3.0

Категории