
로컬 네트워크의 장치 대역폭을 관리자 권한 없이 모니터링, 분석 및 제한하는 도구

이 프로젝트는 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 호환 셸인 배포판에서는 일반적으로 작동하지만, iptables 셸이 설치되지 않은 순수 nft 규칙으로만 관리되는 방화벽은 이 도구가 다루지 않습니다.
git clone https://github.com/DavidsonRafaelK/evillimiter.git
cd evillimiter
python3 -m venv .venv
source .venv/bin/activate
pip install .
sudo로 실행하세요(원시 소켓, iptables/tc는 루트 권한 필요). 루트 권한이 필요한 것은 설치가 아니라 실행입니다:
sudo .venv/bin/evillimiter
참고: sudo python3 setup.py install(이전 지침)은 최신 setuptools에서 더 이상 사용되지 않으며 ModuleNotFoundError: No module named 'setuptools' 오류로 실패하는 경우가 많습니다. sudo는 시스템 Python을 실행하는데, 일반적으로 venv의 자체 Python(pip가 관리)과 달리 setuptools가 설치되어 있지 않기 때문입니다. PEP 668을 적용하는 배포판(Arch, Debian 12+ 등)에서는 이러한 이유로 venv 외부 설치가 완전히 차단됩니다.
또는 릴리스 페이지에서 원하는 버전을 다운로드할 수 있습니다.
도구를 실행하려면 evillimiter 또는 python3 bin/evillimiter를 입력하세요.
evillimiter는 필요한 정보(네트워크 인터페이스, 넷마스크, 게이트웨이 주소 등)를 자동으로 해석하려고 시도합니다.
| 인수 | 설명 |
|---|---|
-h | 모든 명령줄 인수를 나열하는 도움말 메시지 표시 |
-i [인터페이스 이름] | 네트워크 인터페이스 지정(지정하지 않으면 자동 해석) |
-g [게이트웨이 IP 주소] | 게이트웨이 IP 주소 지정(지정하지 않으면 자동 해석) |
-m [게이트웨이 MAC 주소] | 게이트웨이 MAC 주소 지정(지정하지 않으면 자동 해석) |
-n [넷마스크 주소] | 넷마스크 지정(지정하지 않으면 자동 해석) |
-f | 현재 iptables 및 tc 구성을 플러시합니다. 패킷이 올바르게 처리되도록 보장합니다. |
--colorless | 색상 출력 비활성화 |
-l [파일 경로], --log-file [파일 경로] | 모든 ok/error 메시지를 이 파일에도 추가 기록(일반 텍스트, 색상 코드 없음). |
--version | 설치된 버전을 출력하고 종료합니다. |
위의 플래그 중 (일회성 작업이지 지속되는 기본 설정이 아닌 -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 명령어| 명령어 | 설명 |
|---|---|
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 [ms]) (--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 [시간 ms]) | 제한/차단된 호스트뿐만 아니라 발견된 모든 호스트의 대역폭 사용량을 모니터링합니다(현재 사용량, 총 사용 대역폭 등).--interval은 대역폭 정보가 새로고침되는 간격을 밀리초 단위로 설정합니다(기본값 500ms).예: monitor --interval 1000 |
analyze [ID1,ID2,...] (--duration [시간 s]) | 누가 얼마나 많은 대역폭을 사용하는지 확인하기 위해 제한 없이 호스트의 트래픽을 분석합니다.--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 | 이와 유사한 명령 정보를 표시합니다. |