
Packet-Sniffer v4.0.0
Сниффер сетевых пакетов, разработанный на Python 3.
Packet Sniffer
Монитор сетевого трафика для GNU/Linux. Кадры захватываются с сетевого интерфейса через raw-сокет, декодируются слой за слоем с помощью библиотеки NETProtocols и выводятся на экран по мере поступления:
[>] 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
Декодирование учитывает опции (уважаются IHL в IPv4 и смещение данных в TCP), повреждённые или обрезанные кадры диагностируются, а не обрушивают захват, а неизвестные протоколы завершают цепочку декодирования корректно — захват переживает всё, что доставляет сеть.
Установка
pipx install "git+https://github.com/EONRaider/Packet-Sniffer.git"
(Или uv tool install с тем же URL. Приложение не
опубликовано на PyPI под этим именем — этот дебют отложен до его
предстоящего переименования.)
Либо запустите из клонированного репозитория с помощью uv:
git clone https://github.com/EONRaider/Packet-Sniffer.git
cd Packet-Sniffer
uv sync
Использование
packet-sniffer [-h] [-i INTERFACE] [-d] [--version]
options:
-i, --interface interface to capture frames from (default: all interfaces)
-d, --data also display each frame's raw payload
Захват требует raw-сокет, что в Linux означает либо права root:
sudo packet-sniffer -i eth0
...либо предоставление интерпретатору capability CAP_NET_RAW. Из
клонированного репозитория запускайте его как sudo .venv/bin/python -m packet_sniffer.
Как это работает
capture.py возвращает raw-кадры из сокета AF_PACKET;
decoder.py проходит по цепочке протоколов каждого кадра (Ethernet → ARP /
IPv4 / IPv6 → ICMP / TCP / UDP) и формирует неизменяемый DecodedFrame;
рендереры в output.py обрабатывают декодированные типы слоёв. Полный
обзор — включая то, почему память остаётся стабильной при длительных захватах и как
добавить собственный рендерер — находится в ARCHITECTURE.md.
Всё, кроме raw-сокета, работает в любой ОС, поэтому набору тестов (декодирование и рендеринг по записанным кадрам) не нужны ни root, ни Linux:
uv run pytest
План развития
- Фильтрация BPF (фильтры захвата на стороне ядра)
- Вывод в файлы pcap/pcapng и чтение из pcap для воспроизведения
- Вывод в JSON/NDJSON для передачи в другие инструменты
- Ядерные временные метки (
SO_TIMESTAMPNS) - Новое имя — следите за обновлениями
Правовое предупреждение
Использование кода, содержащегося в этом репозитории, частично или полностью, для атак на цели без предварительного обоюдного согласия незаконно. Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе.
Разработчики не несут никакой ответственности и не отвечают за неправомерное использование или ущерб, причинённый любым кодом из этого репозитория, в случае, если случайно или иным образом он будет использован угрозой или неуполномоченным лицом как средство компрометации безопасности, конфиденциальности, целостности и/или доступности систем и связанных с ними ресурсов. В этом контексте термин «компрометация» понимается как использование известных или неизвестных уязвимостей, присутствующих в указанных системах, включая, но не ограничиваясь, реализацию средств защиты, будь то человеческих или электронных.
Использование этого кода одобряется разработчиками только в тех случаях, которые непосредственно связаны с образовательной средой или авторизованными тестами на проникновение, заявленная цель которых — обнаружение и устранение уязвимостей в системах, ограничивая их подверженность компрометации и эксплуатации вредоносными агентами, как это определено в соответствующих моделях угроз.