Wireless Interface Setup
Before performing wireless attacks, your adapter must support monitor mode and
packet injection. This page covers hardware selection, driver setup, VM passthrough,
and channel configuration — everything needed to reach a fully operational wlan0mon.
End State Goal
wlan0mon interface confirmed in monitor mode,
capable of packet injection on both 2.4 GHz and 5 GHz bands. Verify with aireplay-ng --test wlan0mon.
Recommended Hardware
Not all WiFi cards support monitor mode and injection — the chipset matters more than the brand. These are the best-tested options as of 2025:
| Adapter | Chipset | Bands | Best For | Price |
|---|---|---|---|---|
| ALFA AWUS036ACH | RTL8812AU | 2.4 + 5 GHz | WPA2/WPA3, general purpose ⭐ | ~$35–50 |
| ALFA AWUS036NHA | AR9271 | 2.4 GHz | WPS attacks, Kali native support | ~$25–40 |
| ALFA AWUS1900 | RTL8814AU | 2.4 + 5 GHz | Long range, high-power engagements | ~$50–70 |
| TP-Link TL-WN722N v1 | AR9271 | 2.4 GHz | Budget option — v1 only | ~$15–25 |
| Panda PAU09 | RT5572 | 2.4 + 5 GHz | Evil twin (dual antenna, dual adapter) | ~$30–45 |
| Intel AX210 (M.2) | AX210 | 2.4 + 5 + 6 GHz | Wi-Fi 6E scanning (internal only) | ~$20–35 |
TP-Link WN722N Version Warning
lsusb to confirm the chipset.
Driver Installation
Kali Linux includes most wireless drivers natively. For RTL8812AU/RTL8814AU-based adapters, install the Aircrack-ng patched driver for full injection support:
# Install build dependencies
sudo apt update && sudo apt install -y dkms bc build-essential linux-headers-$(uname -r)
# Check what adapter is connected
lsusb
# RTL8812AU (ALFA AWUS036ACH) — patched driver
git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au && sudo make dkms_install
# RTL8814AU (ALFA AWUS1900) — patched driver
git clone https://github.com/aircrack-ng/rtl8814au.git
cd rtl8814au && sudo make dkms_install
# Verify the driver loaded
lsmod | grep 8812au
iw dev # should now show wlan0 or wlan1# Install build dependencies
sudo apt update && sudo apt install -y dkms bc build-essential linux-headers-$(uname -r)
# Check what adapter is connected
lsusb
# RTL8812AU (ALFA AWUS036ACH) — patched driver
git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au && sudo make dkms_install
# RTL8814AU (ALFA AWUS1900) — patched driver
git clone https://github.com/aircrack-ng/rtl8814au.git
cd rtl8814au && sudo make dkms_install
# Verify the driver loaded
lsmod | grep 8812au
iw dev # should now show wlan0 or wlan1Enable Monitor Mode
# Step 1: Kill processes that interfere with monitor mode
sudo airmon-ng check kill
# Step 2: Enable monitor mode (creates wlan0mon)
sudo airmon-ng start wlan0
# Alternative manual method (more granular control)
sudo ip link set wlan0 down
sudo iw dev wlan0 set type monitor
sudo ip link set wlan0 up
# Verify monitor mode is active
iwconfig wlan0mon
# Look for: Mode:Monitor
# Change channel manually
sudo iwconfig wlan0mon channel 6 # 2.4 GHz CH6
sudo iw dev wlan0mon set channel 36 # 5 GHz CH36
# Return to managed mode when done
sudo airmon-ng stop wlan0mon
sudo systemctl restart NetworkManager# Step 1: Kill processes that interfere with monitor mode
sudo airmon-ng check kill
# Step 2: Enable monitor mode (creates wlan0mon)
sudo airmon-ng start wlan0
# Alternative manual method (more granular control)
sudo ip link set wlan0 down
sudo iw dev wlan0 set type monitor
sudo ip link set wlan0 up
# Verify monitor mode is active
iwconfig wlan0mon
# Look for: Mode:Monitor
# Change channel manually
sudo iwconfig wlan0mon channel 6 # 2.4 GHz CH6
sudo iw dev wlan0mon set channel 36 # 5 GHz CH36
# Return to managed mode when done
sudo airmon-ng stop wlan0mon
sudo systemctl restart NetworkManagerTest Packet Injection
# Test injection capability (sends test frames, looks for AP responses)
sudo aireplay-ng --test wlan0mon
# Successful output includes:
# Trying broadcast probe requests...
# Injection is working!
# Found X APs
# If the test fails, specify a channel first
sudo iwconfig wlan0mon channel 6
sudo aireplay-ng --test wlan0mon
# Check available injection modes for your driver
iw phy phy0 info | grep -A 10 "Supported interface modes"# Test injection capability (sends test frames, looks for AP responses)
sudo aireplay-ng --test wlan0mon
# Successful output includes:
# Trying broadcast probe requests...
# Injection is working!
# Found X APs
# If the test fails, specify a channel first
sudo iwconfig wlan0mon channel 6
sudo aireplay-ng --test wlan0mon
# Check available injection modes for your driver
iw phy phy0 info | grep -A 10 "Supported interface modes"Band & Channel Selection
2.4 GHz
- • Channels 1–14 (1, 6, 11 non-overlapping)
- • Longer range, better wall penetration
- • More congested — interference common
- • Legacy devices, IoT, home routers
5 GHz
- • Channels 36–177 (region-dependent)
- • Shorter range, less wall penetration
- • Less interference, faster speeds
- • Modern laptops, offices, enterprise APs
# Scan both bands simultaneously
sudo airodump-ng --band abg wlan0mon
# Lock to 5 GHz only
sudo airodump-ng --band a wlan0mon
# Lock to 2.4 GHz only
sudo airodump-ng --band bg wlan0mon
# List all channels your adapter supports
iw phy phy0 info | grep -A 50 "Frequencies"
# Check regulatory domain (affects available channels)
iw reg get# Scan both bands simultaneously
sudo airodump-ng --band abg wlan0mon
# Lock to 5 GHz only
sudo airodump-ng --band a wlan0mon
# Lock to 2.4 GHz only
sudo airodump-ng --band bg wlan0mon
# List all channels your adapter supports
iw phy phy0 info | grep -A 50 "Frequencies"
# Check regulatory domain (affects available channels)
iw reg getVM Considerations
USB Passthrough Required in VMs
# VirtualBox: Devices → USB → Click your adapter name
# VMware: VM → Removable Devices → Your Adapter → Connect
# Verify the VM sees the adapter (run inside VM)
lsusb # Should list your USB WiFi adapter
iw dev # Should show wlan0 or wlan1
# Adapter claimed by the host? Release it first (Linux host):
sudo rmmod rt2800usb rt2x00usb
# Then reconnect to VM
# VirtualBox USB 3.0: requires Extension Pack (same version as VirtualBox)
# Download at: https://www.virtualbox.org/wiki/Downloads# VirtualBox: Devices → USB → Click your adapter name
# VMware: VM → Removable Devices → Your Adapter → Connect
# Verify the VM sees the adapter (run inside VM)
lsusb # Should list your USB WiFi adapter
iw dev # Should show wlan0 or wlan1
# Adapter claimed by the host? Release it first (Linux host):
sudo rmmod rt2800usb rt2x00usb
# Then reconnect to VM
# VirtualBox USB 3.0: requires Extension Pack (same version as VirtualBox)
# Download at: https://www.virtualbox.org/wiki/DownloadsTroubleshooting
wlan0mon not created after airmon-ng start
Interfering processes were not fully killed.
sudo airmon-ng check kill
sudo systemctl stop NetworkManager wpa_supplicant
sudo airmon-ng start wlan0sudo airmon-ng check kill
sudo systemctl stop NetworkManager wpa_supplicant
sudo airmon-ng start wlan0Adapter blocked by rfkill
rfkill list all
rfkill unblock allrfkill list all
rfkill unblock allInjection test fails / reports -1 packets
# Set channel first, then re-test
sudo iwconfig wlan0mon channel 6
sudo aireplay-ng --test wlan0mon
# Check driver injection support
iw phy phy0 info | grep -A 10 "Supported interface modes"# Set channel first, then re-test
sudo iwconfig wlan0mon channel 6
sudo aireplay-ng --test wlan0mon
# Check driver injection support
iw phy phy0 info | grep -A 10 "Supported interface modes"No networks appear in airodump-ng
# Confirm monitor mode is active
iwconfig wlan0mon | grep Mode
# Scan explicitly across both bands
sudo airodump-ng --band abg wlan0mon
# Check regulatory domain (some regions disable channels)
iw reg get# Confirm monitor mode is active
iwconfig wlan0mon | grep Mode
# Scan explicitly across both bands
sudo airodump-ng --band abg wlan0mon
# Check regulatory domain (some regions disable channels)
iw reg getMAC Address Spoofing
Change your adapter's MAC before an assessment to reduce attribution. MAC changes reset when monitor mode is stopped.
# View current MAC
ip link show wlan0 | grep ether
# Randomise with macchanger
sudo ip link set wlan0 down
sudo macchanger -r wlan0 # fully random
sudo macchanger -a wlan0 # random, same vendor OUI
sudo ip link set wlan0 up
# Set a specific MAC
sudo ip link set wlan0 down
sudo ip link set wlan0 address AA:BB:CC:DD:EE:FF
sudo ip link set wlan0 up# View current MAC
ip link show wlan0 | grep ether
# Randomise with macchanger
sudo ip link set wlan0 down
sudo macchanger -r wlan0 # fully random
sudo macchanger -a wlan0 # random, same vendor OUI
sudo ip link set wlan0 up
# Set a specific MAC
sudo ip link set wlan0 down
sudo ip link set wlan0 address AA:BB:CC:DD:EE:FF
sudo ip link set wlan0 upPractice Labs
Hands-on wireless setup practice in safe, isolated environments.