
Ferramenta que monitora, analisa e limita a largura de banda de dispositivos na rede local sem acesso administrativo

Este projeto é um fork mantido do bitbrute/evillimiter. O repositório upstream não é mais mantido, portanto este fork dá continuidade ao desenvolvimento — correções de bugs, novos recursos e atualizações de compatibilidade. Consulte Alterações específicas do fork abaixo.
Uma ferramenta para monitorar, analisar e limitar a largura de banda (upload/download) de dispositivos na sua rede local sem acesso físico ou administrativo.
evillimiter utiliza ARP spoofing e traffic shaping para limitar a largura de banda dos hosts na rede. Em redes habilitadas para IPv6, o NDP spoofing é usado em conjunto com o ARP spoofing para também cortar o tráfego IPv6 de um host, que de outra forma contornaria o limite/bloqueio apenas IPv4.
Procurando uma versão compatível com Windows?
Confira a alternativa de código aberto EvilLimiter para Windows.
Execute isso apenas em uma rede que você possua ou para a qual tenha permissão por escrito para testar. O ARP e o NDP spoofing interrompem o tráfego de outras pessoas por design, e fazer isso em uma rede que você não controla é ilegal na maioria dos lugares.
Pacotes Python possivelmente ausentes serão instalados durante o processo de instalação.
O evillimiter localiza tc, iptables e sysctl via PATH na inicialização e gera erros claros se algum estiver ausente. Ele executa o binário iptables especificamente — em distribuições onde iptables é um shim de compatibilidade iptables-nft isso geralmente funciona, mas um firewall gerenciado puramente por regras nativas nft sem shim iptables instalado não é algo com que esta ferramenta interaja.
git clone https://github.com/DavidsonRafaelK/evillimiter.git
cd evillimiter
python3 -m venv .venv
source .venv/bin/activate
pip install .
Execute com sudo (raw sockets, iptables/tc exigem root) — é a execução que precisa de root, não a instalação:
sudo .venv/bin/evillimiter
Nota: sudo python3 setup.py install (as instruções antigas) está obsoleto no setuptools moderno e frequentemente falha diretamente com ModuleNotFoundError: No module named 'setuptools' — o sudo executa o Python do sistema, que normalmente não tem setuptools instalado, ao contrário do Python do venv que o pip gerencia para você. Em distribuições que aplicam o PEP 668 (Arch, Debian 12+, ...), instalar fora de um venv é totalmente bloqueado por esse motivo.
Alternativamente, você pode baixar uma versão desejada na página de Releases.
Digite evillimiter ou python3 bin/evillimiter para executar a ferramenta.
O evillimiter tentará resolver as informações necessárias (interface de rede, máscara de rede, endereço do gateway, ...) por conta própria, automaticamente.
Qualquer uma das opções acima (exceto -f/--flush, que é uma ação única, não uma preferência persistida) pode receber um padrão em um arquivo ini opcional em ~/.config/evillimiter/config.ini (ou $XDG_CONFIG_HOME/evillimiter/config.ini). Uma opção de linha de comando sempre substitui o arquivo de configuração.
[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] define os valores iniciais normalmente definidos em tempo de execução via watch set interval/watch set range (veja abaixo), para que não precisem ser reinseridos a cada sessão.
auto_scan (opt-in, desativado por padrão) executa scan e depois hosts automaticamente logo após a inicialização, para que você não precise digitá-los a cada sessão.
evillimitertc/iptables que moldam o tráfego são apenas IPv4.watch (que corresponde por MAC) não consegue acompanhá-los; a restrição antiga fica vinculada a um MAC/IP que ninguém mais usa. Tais endereços são sinalizados como (random) na tabela hosts (seu bit de administração local está definido) para que você possa identificar um dispositivo que provavelmente reaparecerá sob uma nova identidade.Tudo abaixo foi adicionado neste fork, além do último release do upstream (v1.5.0):
limit/block também cubram o tráfego IPv6 de um host em vez de apenas IPv4~/.config/evillimiter/config.ini) para opções padrão e configurações de monitoramento-l/--log-file para persistir mensagens de ok/erro em um arquivo--versionblock agora também bloqueia as cadeias INPUT/OUTPUT (tráfego de/para esta própria máquina), não apenas FORWARDwatch agora exibe o status Online/Offline de cada host monitorado e monitora automaticamente hosts em limit/blockConsulte CHANGELOG para o histórico completo de versões, incluindo o do upstream.
Quer relatar um bug, solicitar um recurso ou enviar um pull request? Consulte CONTRIBUTING.md para as regras sobre abrir issues e PRs. Leia também o Código de Conduta.
Evil Limiter — criado originalmente por bitbrute, agora mantido por DavidsonRafaelK — é fornecido "como está" e "com todas as falhas". Nem o autor original nem o mantenedor atual fazem quaisquer declarações ou garantias de qualquer tipo sobre a segurança, adequação, ausência de vírus, imprecisões, erros tipográficos ou outros componentes prejudiciais deste software. Existem perigos inerentes no uso de qualquer software, e você é o único responsável por determinar se o Evil Limiter é compatível com seu equipamento e outros softwares instalados nele. Você também é o único responsável pela proteção do seu equipamento e backup dos seus dados, e nenhuma das partes será responsável por quaisquer danos que você possa sofrer em conexão com o uso, modificação ou distribuição deste software.
Copyright (c) 2019-2026 por bitbrute, copyright (c) 2026 por DavidsonRafaelK para alterações específicas do fork. Alguns direitos reservados.
Evil Limiter é licenciado sob a Licença MIT conforme declarado no arquivo LICENSE.
| Argumento | Explicação |
|---|
-h | Exibe mensagem de ajuda listando todos os argumentos de linha de comando |
-i [Nome da Interface] | Especifica a interface de rede (resolvida se não especificada) |
-g [Endereço IP do Gateway] | Especifica o endereço IP do gateway (resolvido se não especificado) |
-m [Endereço MAC do Gateway] | Especifica o endereço MAC do gateway (resolvido se não especificado) |
-n [Endereço da Máscara] | Especifica a máscara de rede (resolvida se não especificada) |
-f | Limpa a configuração atual de iptables e tc. Garante que os pacotes sejam tratados corretamente. |
--colorless | Desativa a saída colorida |
-l [Caminho do Arquivo], --log-file [Caminho do Arquivo] | Também anexa cada mensagem de ok/erro a este arquivo (texto simples, sem códigos de cor). |
--version | Exibe a versão instalada e sai. |
| Comando | Explicação |
|---|
scan (--range [Faixa de IP]) (--intensity [1,2,3]) | Escaneia sua rede em busca de hosts online. Uma das primeiras coisas a fazer após iniciar.--range permite especificar uma faixa de IP personalizada.--intensity troca velocidade por minúcia: 1 rápido, 2 normal (padrão), 3 intenso (mais tentativas/timeout mais longo, útil em redes com perda de pacotes). Persistente até ser alterado novamente — também se aplica aos escaneamentos de reconexão em segundo plano do watch.Por exemplo: scan --range 192.168.178.1-192.168.178.40 ou apenas scan para escanear toda a sub-rede. |
hosts (--force) | Exibe todos os hosts/dispositivos previamente escaneados e informações básicas. Mostra o ID de cada host necessário para interação.--force força a exibição da tabela, mesmo quando ela não cabe no terminal. |
limit [ID1,ID2,...] [Taxa] (--upload) (--download) | Limita a largura de banda do(s) host(s) associado(s) ao ID especificado. A taxa determina a velocidade da internet. O(s) host(s) é(são) adicionado(s) automaticamente à lista de monitoramento.--upload limita apenas o tráfego de saída.--download limita apenas o tráfego de entrada.Taxas válidas: bit, kbit, mbit, gbitA taxa também pode ser up/down (ex.: 200kbit/1mbit) para taxas independentes de upload/download — válida apenas com ambas as direções (sem --upload/--download).Por exemplo: limit 4,5,6 200kbit ou limit all 1gbit ou limit 4 200kbit/1mbit |
block [ID1,ID2,...] (--upload) (--download) | Bloqueia a conexão com a internet do(s) host(s) associado(s) ao ID especificado. O(s) host(s) é(são) adicionado(s) automaticamente à lista de monitoramento.--upload limita apenas o tráfego de saída --download limita apenas o tráfego de entrada. |
netem [ID1,ID2,...] (--delay [ms]) (--loss [%]) (--clear) | Simula atraso/perda de pacotes no(s) host(s) — exige que o host já esteja com limit aplicado, pois se anexa à classe tc de limitação de taxa existente. Anexa-se a qualquer direção em que o host esteja limitado; sem opção de direção separada.--clear remove o netem mantendo a limitação de taxa.Por exemplo: netem 4 --delay 200ms --loss 10% ou netem 4 --clear |
free [ID1,ID2,...] | Remove a limitação/bloqueio do(s) host(s) associado(s) ao ID especificado. Remove todas as restrições adicionais. |
add [IP] (--mac [MAC]) | Adiciona host personalizado à lista de hosts. O endereço MAC será resolvido automaticamente ou pode ser especificado manualmente. Por exemplo: add 192.168.178.24 ou add 192.168.1.50 --mac 1c:fc:bc:2d:a6:37 |
monitor (--interval [tempo em ms]) | Monitora o uso de largura de banda de cada host descoberto, não apenas os limitados/bloqueados (uso atual, largura de banda total usada, ...).--interval define o intervalo após o qual as informações de largura de banda são atualizadas em milissegundos (padrão 500ms).Por exemplo: monitor --interval 1000 |
analyze [ID1,ID2,...] (--duration [tempo em s]) | Analisa o tráfego do(s) host(s) sem limitar para determinar quem usa quanta largura de banda.--duration especifica a duração da análise em segundos (padrão 30s).Por exemplo: analyze 2,3 --duration 120 |
watch | Exibe o status atual do monitoramento, incluindo o estado Online/Offline de cada host monitorado conforme o último ciclo de escaneamento. O recurso de monitoramento detecta quando um host se reconecta com um endereço IP diferente. Hosts são adicionados à lista de monitoramento automaticamente após limit ou block. |
watch add [ID1,ID2,...] | Adiciona o(s) host(s) especificado(s) à lista de monitoramento. Por exemplo: watch add 6,7,8 |
watch remove [ID1,ID2,...] | Remove o(s) host(s) especificado(s) da lista de monitoramento. Por exemplo: watch remove all |
watch set [Atributo] [Valor] | Altera as configurações atuais de monitoramento. Os seguintes atributos podem ser alterados:range é a faixa de IP a ser escaneada para reconexões.interval é o tempo de espera entre cada escaneamento de rede (em segundos).Por exemplo: watch set interval 120 |
clear | Limpa a janela do terminal. |
quit | Sai do aplicativo. |
?, help | Exibe informações de comandos semelhantes a estas. |
limit/block relatam falhas de tc/iptables em vez de silenciosamente alegar sucessoByteValue para totais na faixa de terabytes~/.config/evillimiter/history), navegável com ↑/↓hosts mostra a taxa/direção atribuída para hosts limitados/bloqueados, em vez de apenas "Limited"/"Blocked"scan --intensity [1,2,3] para trocar velocidade de escaneamento por minúcia (rápido/normal/intenso)auto_scan para executar scan e depois hosts automaticamente na inicializaçãomonitor rastreia cada host descoberto, não apenas os limitados/bloqueadoslimit aceita taxas up/down (ex.: 200kbit/1mbit) para limites independentes de upload/download em uma única chamadanetem [ID] --delay [ms] --loss [%] para simular atraso/perda de pacotes em um host já limitado (--clear para removê-lo)