
Realtek RTL8852AE / rtw89 の Linux / Kali Linux 向けモニターモードおよびパケットインジェクション(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) の実システム上での実際の実行結果を示しています。
BSSID をまたいだ管理フレーム (ビーコン、プローブリクエスト/レスポンス)、制御フレーム (ACK、Block Ack、RTS、CTS)、データフレームの完全なプロミスキャス受信を示すライブ 802.11 パケットキャプチャ。アンテナごとの RSSI (-18 dBm、-24 dBm) およびチャネル周波数 (2462 MHz / CH 11) のメタデータも完全に含まれます:

aireplay-ng -9)アクティブな AP に対する IEEE 802.11 診断パケットインジェクションテストの成功例。100% のフレーム到達率 (30/30 のプローブリクエストが 2ms 未満の ping 時間で ACK された) を示し、verify_monitor_diag.py と aireplay-ng によって確認されています:

多くの Linux および Kali Linux ユーザーが、Realtek RTL8852AE アダプタを搭載した最新の Wi-Fi 6 ノート PC で airmon-ng を実行したり、パケットインジェクションを試みたりすると失敗すると報告しています。lwfinger/rtw89 およびメインライン Linux カーネルにおける一般的な上流の問題:
詳細なハードウェアレジスタのリバースエンジニアリングと rtw89 RISC-V ファームウェア通信プロトコルの分析を通じて、本プロジェクトは 4 つの根本原因 をホストカーネルドライバ内で完全に解決します:
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()は、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かどうか (これは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