
Патч для Realtek RTL8852AE / rtw89, включающий режим монитора и инъекцию пакетов (Raw TX) в Linux / Kali Linux
English | Русская документация | Техническая архитектура (EN)
Патчсет и модуль расширения для штатного открытого драйвера ядра Linux rtw89 (Realtek RTL8852AE PCIe [10ec:8852], а также совместимых чипсетов RTL8852BE и RTL8852CE).
Обеспечивает полноценную поддержку режима монитора mac80211 (NL80211_IFTYPE_MONITOR) с захватом кадров с метаданными Radiotap для Wireshark / tcpdump, работу утилит airmon-ng / airodump-ng, а также отправку сырых кадров и инъекцию пакетов (IEEE80211_TX_CTL_INJECTED / aireplay-ng).
Работает на 100% на стороне драйвера ОС Linux со штатной неизменённой подписанной прошивкой из пакета linux-firmware. Модификация бинарных файлов прошивки не требуется.
[!TIP] 100% работоспособность подтверждена: На приведённых ниже реальных скриншотах продемонстрирована работа пропатченного драйвера в Kali Linux (ядро 7.1.5+kali-amd64) на реальном адаптере Realtek RTL8852AE PCIe (
[10ec:8852]).
Перехват реального радиоэфира в режиме монитора: приём управляющих кадров Management (Beacon, Probe), кадров управления Control (ACK, Block Ack, RTS, CTS) и Data-кадров со всеми метаданными Radiotap (частота 2462 МГц / 11 канал, уровень сигнала по антеннам: -18 dBm / -24 dBm):

aireplay-ng -9)Успешный тест генерации и инъекции сырых кадров через aireplay-ng -9 и диагностический скрипт: 100% успешной доставки (30/30 ответов от точек доступа, средний ping ~1.5 мс):

Тысячи пользователей Linux и Kali Linux сталкиваются с тем, что в современных ноутбуках с адаптерами Realtek RTL8852AE не работает airmon-ng и инъекция пакетов, а в репозиториях lwfinger/rtw89 годами висят вопросы без ответа:
В результате реверс-инжиниринга регистров и протокола общения хоста с RISC-V контроллером прошивки были выявлены и устранены четыре ключевые причины:
reg.h / mac.c)
ADDR_CAM, а сканирование может оставлять фильтр на паузе (R_AX_PKT_CTRL_B0_PAUSE).rtw89_mon настраивает регистры R_AX_RX_FLTR_OPT (0xCE20), R_AX_CTRL_FLTR (0xCE24), R_AX_MGNT_FLTR (0xCE28), R_AX_DATA_FLTR (0xCE2C) маской 0x55555555, учитывает 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.rtw89_mon_resolve_tx_vif() безопасно разрешает активный мониторный интерфейс до разыменования.TXWD_INFO (core.c)
mac80211 выставляет знаковое значение s8 rates[0].idx = -1, которое приводилось к u8 (255), вызывая сбой дескриптора передачи.rtw89_mon_fixup_tx_desc() выставляет корректную скорость (RTW89_HW_RATE_OFDM6 — 6 Мбит/с), включает флаги en_wd_info, use_rate, dis_data_fb и ограничивает повторы (tx_cnt_lmt = 1) для кадров с флагом IEEE80211_TX_CTL_NO_ACK.mac_id в прошивке (fw.h)
mac_id оставался на паузе в планировщике прошивки, блокируя передачу.rtw89_mon_add_vif_post() инициализирует таблицы h2c_default_cmac_tbl / h2c_default_dmac_tbl, регистрирует контекст через rtw89_fw_h2c_join_info() с ролью RTW89_SELF_ROLE_AP и типом RTW89_NET_TYPE_NO_LINK, снимает паузу через rtw89_fw_h2c_macid_pause() и сбрасывает бит в R_AX_MACID_SLEEP_0 (0xC2C0).Скрипт установки scripts/patch_rtw89.py автоматически определяет версию драйвера:
| Поколение API | Версии ядер Linux | Архитектура VIF и блокировок | Примеры дистрибутивов |
|---|---|---|---|
| API Gen 1 | Linux 6.1 – 6.10 | struct rtw89_vif, rtwdev->mutex | Debian 12 (Bookworm), Ubuntu 22.04 LTS |
| 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 |
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
mkdir -p ~/rtw89_src
tar -xf /usr/src/linux-source-*.tar.xz \
--strip-components=6 -C ~/rtw89_src \
--wildcards '*/drivers/net/wireless/realtek/rtw89/*'
chmod +x scripts/*.sh scripts/*.py
./scripts/build_module.sh --rtw89-dir ~/rtw89_src --install
airmon-ng или iw)airmon-ng (Kali Linux)sudo airmon-ng check kill
sudo airmon-ng start 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
# Захват кадров 802.11 с Radiotap:
sudo tcpdump -i wlan0 -I -n -e -c 30
aireplay-ng)sudo aireplay-ng -9 wlan0mon
Или с помощью встроенного скрипта аппаратной самодиагностики:
sudo python3 scripts/verify_monitor_diag.py \
--iface wlan0 \
--freq 2412 \
--duration 5 \
--diag-tx \
--restore-managed
# Удалить модуль из /lib/modules/.../updates и загрузить исходный драйвер
./scripts/build_module.sh --uninstall