
Linux / Kali Linux용 Realtek RTL8852AE / rtw89 모니터 모드 및 패킷 주입(Raw TX) 패치
English | Русская документация | Architecture Reference
메인라인 rtw89 무선 드라이버(Realtek RTL8852AE PCIe [10ec:8852], RTL8852BE 및 RTL8852CE에 대한 아키텍처 호환성 포함)를 위한 호스트 측 Linux mac80211 드라이버 확장 및 버그 수정 패치셋입니다.
Wireshark / tcpdump를 위한 완전한 IEEE 802.11 NL80211_IFTYPE_MONITOR Radiotap 패킷 캡처, 완전한 airmon-ng / airodump-ng 호환성, 그리고 표준을 준수하는 원시 프레임 전송 / 패킷 주입(IEEE80211_TX_CTL_INJECTED / aireplay-ng)을 가능하게 합니다.
공식 배포판 linux-firmware 패키지의 수정되지 않은, 암호학적으로 서명된 rtw89 펌웨어 이미지를 사용하여 호스트 커널 드라이버 측에서 100% 동작합니다. 펌웨어 리버스 패치나 바이너리 수정이 필요하지 않습니다.
[!TIP] Kali Linux에서 100% 동작: 아래 스크린샷은 **Realtek RTL8852AE PCIe 무선 어댑터(
[10ec:8852])**가 장착된 Kali Linux (커널 7.1.5+kali-amd64) 실행 시스템에서의 실제 실행 결과를 보여줍니다.
관리 프레임(Beacon, Probe Request/Response), 제어 프레임(ACK, Block Ack, RTS, CTS), 데이터 프레임을 BSSID 전반에 걸쳐 완전한 프로미스큐어스 수신으로 보여주는 실시간 802.11 패킷 캡처로, 안테나별 RSSI(-18 dBm, -24 dBm)와 채널 주파수(2462 MHz / CH 11) 메타데이터가 완전히 포함되어 있습니다:

aireplay-ng -9)활성 AP를 대상으로 100% 프레임 전달(30/30 프로브 요청이 2ms 미만의 핑 시간으로 확인됨)을 보여주는 성공적인 IEEE 802.11 진단 패킷 주입 테스트로, verify_monitor_diag.py와 aireplay-ng에 의해 확인되었습니다:

수천 명의 Linux 및 Kali Linux 사용자들이 Realtek RTL8852AE 어댑터가 장착된 최신 Wi-Fi 6 노트북에서 airmon-ng를 실행하거나 패킷 주입을 시도할 때 실패한다고 보고합니다. lwfinger/rtw89 및 메인라인 Linux 커널에서 흔히 발생하는 업스트림 문제:
상세한 하드웨어 레지스터 리버스 엔지니어링과 rtw89 RISC-V 펌웨어 통신 프로토콜 분석을 통해, 이 프로젝트는 네 가지 근본 원인을 전적으로 호스트 커널 드라이버에서 해결합니다:
reg.h / mac.c)
ADDR_CAM과 일치하지 않는 802.11 제어 프레임(ACK, RTS, CTS, BlockAck) 및 교차 BSS 유니캐스트 데이터 프레임을 드롭합니다. 하드웨어 스캔 오프로드로 인해 Band 0 RX 패킷 필터가 일시 중지된 상태(R_AX_PKT_CTRL_B0_PAUSE)로 남을 수도 있습니다.rtw89_mon_program_mac_rx_tx_regs()가 프로미스큐어스 마스크 0x55555555로 R_AX_RX_FLTR_OPT (0xCE20), R_AX_CTRL_FLTR (0xCE24), R_AX_MGNT_FLTR (0xCE28), R_AX_DATA_FLTR (0xCE2C)를 재구성하고, FIF_FCSFAIL을 준수하며, 채널 전환(rtw89_set_channel()) 전반에 걸쳐 필터 상태를 자동으로 재적용합니다.NULL vif 커널 패닉 (mac80211.c & core.c)
rtw89_ops_tx() 및 rtw89_core_tx_write()에서 매크로 vif_to_rtwvif(vif)가 info->control.vif가 NULL인지(이는 mac80211 Radiotap 주입의 표준 동작임) 확인하기 전에 지역 변수 선언에서 무조건 평가되었습니다.rtw89_mon_resolve_tx_vif()가 역참조 전에 활성 모니터 VIF를 확인하여 커널 크래시를 방지합니다.rtw89_core_tx_update_injection()에서의 잘못된 레이트 인덱스 및 누락된 TXWD_INFO (core.c)
mac80211은 부호 있는 s8 rates[0].idx = -1을 전달합니다. 업스트림은 이를 u8(255)로 캐스팅하여 잘못된 하드웨어 레이트 인덱스를 기록했고, 비관리 프레임에서 desc_info->en_wd_info를 누락시켰습니다.rtw89_mon_fixup_tx_desc()가 유효한 하드웨어 레이트(기본값 RTW89_HW_RATE_OFDM6 / 6.0 Mbps)를 선택하고, en_wd_info / use_rate / dis_data_fb를 설정하며, IEEE80211_TX_CTL_NO_ACK가 설정된 경우 하드웨어 재시도 횟수를 제한(tx_cnt_lmt = 1)합니다.mac_id 스케줄러 컨텍스트 및 슬립 락 (fw.h)
IEEE80211_HW_WANT_MONITOR_VIF)는 mac_id와 하드웨어 포트를 할당하지만, CMAC/DMAC 테이블을 구성하거나 링크를 펌웨어 스케줄러에 등록하지 않습니다. 펌웨어는 TX 큐를 일시 중지된 상태로 유지합니다.rtw89_mon_add_vif_post()가 h2c_default_cmac_tbl / h2c_default_dmac_tbl을 프로그래밍하고, RTW89_NET_TYPE_NO_LINK와 함께 RTW89_SELF_ROLE_AP를 사용하여 rtw89_fw_h2c_join_info()로 역할을 등록하며(비콘 TX는 비활성화한 채로 클라이언트 역할 비콘 타임아웃 검사를 우회), rtw89_fw_h2c_macid_pause()로 MACID 일시 중지를 해제하고, R_AX_MACID_SLEEP_0 (0xC2C0)을 클리어합니다.AST/중괄호 인식 패처(scripts/patch_rtw89.py)는 빌드 시 core.h와 mac80211.c를 검사하고 두 업스트림 드라이버 세대 모두에 자동으로 적응합니다:
| 드라이버 세대 | 커널 버전 | 잠금 및 VIF 아키텍처 | 배포판 예시 |
|---|---|---|---|
| API Gen 1 | Linux 6.1 – 6.10 | struct rtw89_vif, rtwdev->mutex | Debian 12 (Bookworm), Ubuntu 22.04 LTS (HWE) |
| API Gen 2 | Linux 6.11 – 7.x+ & lwfinger/rtw89 | MLO struct rtw89_vif_link, pure_monitor_mode_vif, wiphy_lock | Kali Linux 2024+, Ubuntu 24.04+, Arch Linux, Fedora |
rtw89-monitor-injection/
├── src/
│ ├── rtw89_mon.h # Extension API declarations & autoconf bridge
│ └── rtw89_mon.c # MAC RX filter, H2C monitor context & TX descriptor fixups
├── scripts/
│ ├── patch_rtw89.py # AST/brace-aware source integrator (--detect-only, --apply, --revert)
│ ├── build_module.sh # Kbuild build, live reload, /lib/modules/.../updates installer
│ └── verify_monitor_diag.py # IEEE 802.11 Radiotap RX & single Null-Data diagnostic verifier
├── patches/
│ └── linux-7.1-rtw89-monitor.diff # Reference unified diff for Linux 6.11 - 7.x+
├── tests/
│ └── test_patch_rtw89.py # Automated Gen 1 / Gen 2 patch & revert unit tests
├── docs/
│ ├── ARCHITECTURE.md # Register, H2C, and mac80211 flow documentation
│ └── README.ru.md # Russian documentation
├── README.md # English documentation
└── README_RU.md # Russian documentation (root link)
sudo apt update
sudo apt install -y linux-headers-$(uname -r) linux-source build-essential python3
git clone https://github.com/ph4ntom-rev/rtw89-monitor-injection.git
cd rtw89-monitor-injection
# Extract distribution rtw89 source code
mkdir -p ~/rtw89_src
tar -xf /usr/src/linux-source-*.tar.xz \
--strip-components=6 -C ~/rtw89_src \
--wildcards '*/drivers/net/wireless/realtek/rtw89/*'
# Compile and install into /lib/modules/$(uname -r)/updates/rtw89
chmod +x scripts/*.sh scripts/*.py
./scripts/build_module.sh --rtw89-dir ~/rtw89_src --install
(팁: 디스크에 영구 설치하지 않고 메모리에서 모듈을 테스트하려면 ./scripts/build_module.sh --rtw89-dir ~/rtw89_src --reload를 사용하세요).
airmon-ng / iw를 사용한 모니터 모드airmon-ng 사용 (Kali Linux / Aircrack-ng)sudo airmon-ng check kill
sudo airmon-ng start wlan0
# Verify monitor interface (usually wlan0mon or wlan0)
sudo airodump-ng wlan0mon
iw 및 tcpdump / Wiresharksudo ip link set wlan0 down
sudo iw dev wlan0 set type monitor
sudo ip link set wlan0 up
sudo iw dev wlan0 set freq 2412
# Check kernel logs:
# rtw89_8852ae ...: monitor mode initialized on mac_id=0 port=0 (ret=0)
sudo dmesg | grep rtw89