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

Этот проект — поддерживаемый форк bitbrute/evillimiter. Исходный репозиторий больше не поддерживается, поэтому этот форк продолжает разработку — исправление ошибок, новые функции и обновления совместимости. См. раздел Изменения в форке ниже.
Инструмент для мониторинга, анализа и ограничения пропускной способности (загрузка/выгрузка) устройств в вашей локальной сети без физического или административного доступа.
evillimiter использует ARP-спуфинг и формирование трафика для ограничения пропускной способности хостов в сети. В сетях с поддержкой IPv6 наряду с ARP-спуфингом используется NDP-спуфинг, чтобы также отсекать IPv6-трафик хоста, который в противном случае обходил бы ограничение/блокировку, работающую только для IPv4.
Ищете версию, совместимую с Windows?
Ознакомьтесь с альтернативой с открытым исходным кодом EvilLimiter for Windows.
Запускайте это только против сети, которой вы владеете или на тестирование которой у вас есть письменное разрешение. ARP- и NDP-спуфинг по своей сути нарушает чужой трафик, и делать это в сети, которой вы не управляете, в большинстве мест незаконно.
Возможно отсутствующие пакеты Python будут установлены в процессе установки.
evillimiter находит tc, iptables и sysctl через PATH при запуске и выдаёт понятную ошибку, если какой-то из них отсутствует. Он обращается именно к бинарнику iptables — на дистрибутивах, где iptables является совместимым шлюзом iptables-nft, это обычно работает, но межсетевой экран, управляемый исключительно через нативные правила nft без установленного шлюза iptables, этот инструмент не поддерживает.
git clone https://github.com/DavidsonRafaelK/evillimiter.git
cd evillimiter
python3 -m venv .venv
source .venv/bin/activate
pip install .
Запускайте с помощью sudo (raw-сокеты, iptables/tc требуют прав root) — root нужен для запуска, а не для установки:
sudo .venv/bin/evillimiter
Примечание: sudo python3 setup.py install (старая инструкция) устарел в современных версиях setuptools и часто полностью завершается ошибкой ModuleNotFoundError: No module named 'setuptools' — sudo запускает системный Python, в котором обычно не установлен setuptools, в отличие от Python внутри venv, которым управляет pip. На дистрибутивах, применяющих PEP 668 (Arch, Debian 12+ и др.), установка вне venv по этой причине полностью заблокирована.
В качестве альтернативы вы можете скачать нужную версию со страницы релизов.
Введите evillimiter или python3 bin/evillimiter для запуска инструмента.
evillimiter попытается самостоятельно автоматически определить необходимую информацию (сетевой интерфейс, маску подсети, адрес шлюза и т. д.).
Любому из флагов выше (кроме -f/--flush, который является разовым действием, а не сохраняемой настройкой) можно задать значение по умолчанию в необязательном ini-файле по пути ~/.config/evillimiter/config.ini (или $XDG_CONFIG_HOME/evillimiter/config.ini). Флаг командной строки всегда имеет приоритет над файлом конфигурации.
[general]
interface = wlan0
colorless = true
auto_scan = true
log_file = /var/log/evillimiter.log
[watch]
interval = 30
range = 192.168.1.1-192.168.1.50
[watch] задаёт начальные значения, которые обычно устанавливаются во время выполнения через watch set interval/watch set range (см. ниже), чтобы их не нужно было вводить заново в каждой сессии.
auto_scan (опционально, по умолчанию выключено) автоматически выполняет scan, а затем hosts сразу после запуска, чтобы вам не приходилось вводить их в каждой сессии.
evillimitertc/iptables, формирующие трафик, работают только с IPv4.watch (сопоставляет по MAC) не может за ними следить; старое ограничение остаётся привязанным к MAC/IP, который больше никто не использует. Такие адреса помечаются как (random) в таблице hosts (у них установлен бит локального управления), чтобы вы могли заметить устройство, которое, вероятно, появится под новой личностью.Всё нижеперечисленное добавлено в этом форке поверх последнего релиза апстрима (v1.5.0):
limit/block также охватывали IPv6-трафик хоста, а не только IPv4~/.config/evillimiter/config.ini) для флагов по умолчанию и настроек наблюдения-l/--log-file для сохранения сообщений об успехе/ошибке в файл--versionblock теперь также блокирует цепочки INPUT/OUTPUT (трафик к самой этой машине/от неё), а не только FORWARDwatch теперь показывает статус «В сети/Не в сети» каждого наблюдаемого хоста и автоматически наблюдает за хостами при limit/blockПолную историю версий, включая версии апстрима, см. в CHANGELOG.
Хотите сообщить об ошибке, запросить функцию или отправить pull request? См. CONTRIBUTING.md с правилами подачи issues и открытия PR. Пожалуйста, также ознакомьтесь с Кодексом поведения.
Evil Limiter — изначально создан bitbrute, в настоящее время поддерживается DavidsonRafaelK — предоставляется «как есть» и «со всеми недостатками». Ни оригинальный автор, ни текущий сопровождающий не дают никаких заверений или гарантий любого рода относительно безопасности, пригодности, отсутствия вирусов, неточностей, опечаток или других вредоносных компонентов этого программного обеспечения. В использовании любого программного обеспечения есть неотъемлемые риски, и вы несёте единоличную ответственность за определение того, совместим ли Evil Limiter с вашим оборудованием и другим программным обеспечением, установленным на вашем оборудовании. Вы также несёте единоличную ответственность за защиту вашего оборудования и резервное копирование ваших данных, и ни одна из сторон не несёт ответственности за любой ущерб, который вы можете понести в связи с использованием, модификацией или распространением этого программного обеспечения.
Copyright (c) 2019-2026 bitbrute, copyright (c) 2026 DavidsonRafaelK за изменения в форке. Некоторые права защищены.
Evil Limiter лицензирован по лицензии MIT, как указано в файле LICENSE.
| Аргумент | Описание |
|---|
-h | Показывает справочное сообщение со всеми аргументами командной строки |
-i [Имя интерфейса] | Указывает сетевой интерфейс (определяется автоматически, если не указан) |
-g [IP-адрес шлюза] | Указывает IP-адрес шлюза (определяется автоматически, если не указан) |
-m [MAC-адрес шлюза] | Указывает MAC-адрес шлюза (определяется автоматически, если не указан) |
-n [Адрес маски подсети] | Указывает маску подсети (определяется автоматически, если не указана) |
-f | Сбрасывает текущую конфигурацию iptables и tc. Гарантирует корректную обработку пакетов. |
--colorless | Отключает цветной вывод |
-l [Путь к файлу], --log-file [Путь к файлу] | Также добавляет каждое сообщение об успехе/ошибке в этот файл (обычный текст, без цветовых кодов). |
--version | Выводит установленную версию и завершает работу. |
| Команда | Описание |
|---|
scan (--range [Диапазон IP]) (--intensity [1,2,3]) | Сканирует вашу сеть на наличие онлайн-хостов. Одна из первых вещей, которые нужно сделать после запуска.--range позволяет указать собственный диапазон IP.--intensity меняет скорость на тщательность: 1 — быстро, 2 — обычно (по умолчанию), 3 — интенсивно (больше повторов/дольше таймаут, полезно в сетях с потерями пакетов). Сохраняется до следующего изменения — также применяется к фоновым повторным сканированиям watch.Например: scan --range 192.168.178.1-192.168.178.40 или просто scan для сканирования всей подсети. |
hosts (--force) | Показывает все ранее просканированные хосты/устройства и базовую информацию. Показывает ID для каждого хоста, необходимый для взаимодействия.--force принудительно показывает таблицу, даже если она не помещается в терминал. |
limit [ID1,ID2,...] [Скорость] (--upload) (--download) | Ограничивает пропускную способность хоста(ов), связанных с указанным ID. Скорость определяет скорость интернета. Хост(ы) автоматически добавляются в список наблюдения.--upload ограничивает только исходящий трафик.--download ограничивает только входящий трафик.Допустимые единицы скорости: bit, kbit, mbit, gbitСкорость также может быть указана как up/down (например, 200kbit/1mbit) для независимых скоростей загрузки/выгрузки — допустимо только с обоими направлениями (без --upload/--download).Например: limit 4,5,6 200kbit или limit all 1gbit или limit 4 200kbit/1mbit |
block [ID1,ID2,...] (--upload) (--download) | Блокирует интернет-соединение хоста(ов), связанных с указанным ID. Хост(ы) автоматически добавляются в список наблюдения.--upload ограничивает только исходящий трафик --download ограничивает только входящий трафик. |
netem [ID1,ID2,...] (--delay [мс]) (--loss [%]) (--clear) | Эмулирует задержку/потерю пакетов на хосте(ах) — требует, чтобы хост уже был limitед, поскольку прикрепляется к существующему классу tc ограничения скорости. Прикрепляется к тем направлениям, в которых хост ограничен; отдельного флага направления нет.--clear удаляет netem, оставляя ограничение скорости на месте.Например: netem 4 --delay 200ms --loss 10% или netem 4 --clear |
free [ID1,ID2,...] | Снимает ограничение/разблокирует хост(ы), связанные с указанным ID. Удаляет все дальнейшие ограничения. |
add [IP] (--mac [MAC]) | Добавляет пользовательский хост в список хостов. MAC-адрес будет определён автоматически или может быть указан вручную. Например: add 192.168.178.24 или add 192.168.1.50 --mac 1c:fc:bc:2d:a6:37 |
monitor (--interval [время в мс]) | Отслеживает использование пропускной способности каждого обнаруженного хоста, а не только ограниченных/заблокированных (текущее использование, общий объём использованной полосы и т. д.).--interval задаёт интервал обновления информации о пропускной способности в миллисекундах (по умолчанию 500 мс).Например: monitor --interval 1000 |
analyze [ID1,ID2,...] (--duration [время в с]) | Анализирует трафик хоста(ов) без ограничения, чтобы определить, кто сколько пропускной способности использует.--duration задаёт продолжительность анализа в секундах (по умолчанию 30 с).Например: analyze 2,3 --duration 120 |
watch | Показывает текущий статус наблюдения, включая состояние «В сети/Не в сети» каждого наблюдаемого хоста по результатам последнего сканирования. Функция наблюдения обнаруживает, когда хост переподключается с другим IP-адресом. Хосты добавляются в список наблюдения автоматически при limit или block. |
watch add [ID1,ID2,...] | Добавляет указанный(е) хост(ы) в список наблюдения. Например: watch add 6,7,8 |
watch remove [ID1,ID2,...] | Удаляет указанный(е) хост(ы) из списка наблюдения. Например: watch remove all |
watch set [Атрибут] [Значение] | Изменяет текущие настройки наблюдения. Можно изменить следующие атрибуты:range — диапазон IP для сканирования переподключений.interval — время ожидания между каждым сканированием сети (в секундах).Например: watch set interval 120 |
clear | Очищает окно терминала. |
quit | Завершает работу приложения. |
?, help | Показывает информацию о командах, аналогичную этой. |
limit/block сообщают об ошибках tc/iptables вместо молчаливого заявления об успехеByteValue для сумм в диапазоне терабайт~/.config/evillimiter/history), навигация стрелками ↑/↓hosts показывает назначенную скорость/направление для ограниченных/заблокированных хостов вместо просто «Limited»/«Blocked»scan --intensity [1,2,3] для обмена скорости сканирования на тщательность (быстро/обычно/интенсивно)auto_scan для автоматического выполнения scan, а затем hosts при запускеmonitor отслеживает каждый обнаруженный хост, а не только ограниченные/заблокированныеlimit принимает скорости up/down (например, 200kbit/1mbit) для независимых ограничений загрузки/выгрузки одним вызовомnetem [ID] --delay [мс] --loss [%] для эмуляции задержки/потери пакетов на уже ограниченном хосте (--clear для удаления)