
本项目是 bitbrute/evillimiter 的维护分支。上游仓库已不再维护,因此本分支继续开发——包括错误修复、新功能和兼容性更新。参见下文 分支特有变更。
一款无需物理或管理权限即可监控、分析并限制本地网络中设备带宽(上传/下载)的工具。
evillimiter 采用 ARP 欺骗 和 流量整形 来限制网络中主机的带宽。在启用 IPv6 的网络中,NDP 欺骗 与 ARP 欺骗同时使用,以切断主机的 IPv6 流量,否则该流量将绕过仅限 IPv4 的限制/阻断。
正在寻找兼容 Windows 的版本?
请查看开源替代方案 EvilLimiter for Windows。
仅可针对您拥有或已获得书面测试许可的网络运行此工具。ARP 和 NDP 欺骗本质上会干扰他人的流量,在您无权控制的网络上执行此操作在大多数地区属于违法行为。
安装过程中可能会自动安装缺失的 Python 包。
evillimiter 在启动时通过 PATH 定位 tc、iptables 和 sysctl,若缺失任一组件则会明确报错。该工具专门调用 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 运行(原始套接字、iptables/tc 需要 root 权限)——需要 root 权限的是运行过程,而非安装过程:
sudo .venv/bin/evillimiter
注意:sudo python3 setup.py install(旧版说明)在现代 setuptools 中已弃用,且通常会直接报错 ModuleNotFoundError: No module named 'setuptools'——sudo 运行的是系统 Python,通常未安装 setuptools,这与由 pip 管理的虚拟环境自带 Python 不同。在强制实施 PEP 668 的发行版(Arch、Debian 12+ 等)上,出于此原因,在虚拟环境之外安装会被完全阻止。
或者,您可以从 Release 页面 下载所需版本。
输入 evillimiter 或 python3 bin/evillimiter 即可运行该工具。
evillimiter 将自动解析所需信息(网络接口、子网掩码、网关地址等)。
上述任何标志(-f/--flush 除外,它是一次性操作而非持久化偏好)都可以在 ~/.config/evillimiter/config.ini(或 $XDG_CONFIG_HOME/evillimiter/config.ini)中的可选 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,因此您无需每次会话手动输入。
evillimiter 命令tc/iptables 规则仅支持 IPv4。watch(按 MAC 匹配)无法跟踪它们;旧限制仍绑定在无人再使用的 MAC/IP 上。此类地址在 hosts 表中标记为 (random)(其本地管理位已设置),以便您识别可能以新身份重新出现的设备。以下所有内容均在本分支中基于上游最后版本(v1.5.0)新增:
limit/block 也能覆盖主机的 IPv6 流量,而不仅限于 IPv4~/.config/evillimiter/config.ini),用于设置默认标志和监视设置-l/--log-file 将成功/错误消息持久化到文件--version 标志block 现在同时阻断 INPUT/OUTPUT 链(发往/来自本机的流量),而不仅限于 FORWARDwatch 现在显示每个被监视主机的在线/离线状态,并在 limit/block 时自动监视主机limit/ 报告 / 失败,而非静默声称成功完整版本历史(包括上游版本)请参见 CHANGELOG。
想要报告错误、请求功能或提交拉取请求?请参阅 CONTRIBUTING.md 了解提交 issue 和发起 PR 的规则。还请阅读 行为准则。
Evil Limiter——最初由 bitbrute 创建,现由 DavidsonRafaelK 维护——按"现状"和"包含所有缺陷"提供。原作者和当前维护者均不对本软件的安全性、适用性、无病毒、无错误、无拼写错误或其他有害组件作出任何形式的陈述或保证。使用任何软件都存在固有风险,您全权负责判断 Evil Limiter 是否与您的设备及设备上安装的其他软件兼容。您还全权负责保护您的设备和备份数据,任何一方均不对您因使用、修改或分发本软件而遭受的任何损害承担责任。
版权所有 (c) 2019-2026 bitbrute,分支特有变更版权 (c) 2026 DavidsonRafaelK。保留部分权利。
Evil Limiter 依据 LICENSE 文件 中所述的 MIT 许可证授权。
| 参数 | 说明 |
|---|
-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速率也可使用 上传/下载 格式(例如 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 | 显示类似于此的命令信息。 |
blocktciptablesByteValue 的格式化问题~/.config/evillimiter/history),可使用 ↑/↓ 导航hosts 表显示受限/被阻断主机分配的速率/方向,而非仅显示"Limited"/"Blocked"scan --intensity [1,2,3] 可在扫描速度与彻底性之间取舍(快速/正常/高强度)auto_scan 配置选项可在启动时自动依次运行 scan 和 hostsmonitor 跟踪所有已发现的主机,而不仅限于受限/被阻断的主机limit 接受 上传/下载 速率(例如 200kbit/1mbit),可在一次调用中分别设置上传/下载限制netem [ID] --delay [毫秒] --loss [%] 可对已受限主机模拟数据包延迟/丢包(--clear 可移除)