Wireless Interface Setup

Setup
🌱 Beginner
T1040

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

By the end of this page you should have a 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

Only v1 (AR9271 chipset) supports monitor mode and injection out-of-the-box. v2 and v3 use the RTL8188EUS chipset which requires a patched driver and does not support injection reliably on all kernels. Check the version label on the box or run 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-drivers.sh
bash
# 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 wlan1

Enable Monitor Mode

monitor-mode.sh
bash
# 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 NetworkManager

Test Packet Injection

test-injection.sh
bash
# 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
band-selection.sh
bash
# 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 get

VM Considerations

USB Passthrough Required in VMs

Running Kali in VirtualBox or VMware? Your host's built-in WiFi card will NOT work for wireless attacks. You must pass a supported USB adapter directly through to the VM. Monitor mode requires USB-level control that cannot be shared between host and guest.
vm-passthrough.sh
bash
# 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/Downloads

Troubleshooting

wlan0mon not created after airmon-ng start

Interfering processes were not fully killed.

fix-monitor-mode.sh
bash
sudo airmon-ng check kill
sudo systemctl stop NetworkManager wpa_supplicant
sudo airmon-ng start wlan0
sudo airmon-ng check kill
sudo systemctl stop NetworkManager wpa_supplicant
sudo airmon-ng start wlan0

Adapter blocked by rfkill

fix-rfkill.sh
bash
rfkill list all
rfkill unblock all
rfkill list all
rfkill unblock all

Injection test fails / reports -1 packets

fix-injection.sh
bash
# 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

fix-no-networks.sh
bash
# 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 get

MAC Address Spoofing

Change your adapter's MAC before an assessment to reduce attribution. MAC changes reset when monitor mode is stopped.

mac-spoof.sh
bash
# 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 up
🎯

Practice Labs

Hands-on wireless setup practice in safe, isolated environments.

🏠
WiFi Hacking 101 TryHackMe easy
Monitor modePacket injectionairodump-ng
Open Lab
🔧
Custom Wireless Lab Custom Lab easy
hostapd virtual APwlan0mon on VMinjection test in isolated RF env