00 iw vs iwconfig — nl80211 mimarisi
iwconfig, artık bakımı yapılmayan eski wireless-tools paketine aittir. Modern kernel'lerde yerini nl80211 tabanlı iw almıştır.
Kullanıcı alanı Kernel ────────────── ──────────────────────────── iw → Netlink (GENL_ID_CTRL) → cfg80211 iwconfig → WEXT (ioctl, deprecated) → wext compat layer ↓ mac80211 → SoftMAC sürücüler sürücü → FullMAC sürücüler
cfg80211 (Wireless Configuration API), kernel'in kablosuz alt sistemi yapılandırma katmanıdır. nl80211, bu katmanla konuşmak için kullanılan netlink ailesidir. mac80211 ise yazılım tabanlı (SoftMAC) sürücüler için IEEE 802.11 yığınını uygular — bağlantı yönetimi, güç tasarrufu, QoS.
Kurulum
# Debian / Ubuntu
apt-get install iw
# Alpine
apk add iw
# Versiyon
iw --version
# iw version 5.19
# iwconfig (eski) hâlâ yüklüyse — karşılaştırma
iwconfig wlan0
# "wlan0: no wireless extensions" → WEXT sürücü desteği yok demektir
# iw, nl80211 üzerinden çalışır — her zaman tercih et
iw dev wlan0 info
Özel kernel derliyorsan: CONFIG_CFG80211=y, CONFIG_MAC80211=y ve hedef sürücünü (ör. CONFIG_ATH9K=y, CONFIG_BRCMFMAC=y) etkinleştir. nl80211 bu config'lere bağlıdır.
01 iw dev ve phy bilgileri
Sistemdeki WiFi donanımını ve arayüzleri listele, yeteneklerini sorgula.
Tüm wireless interface'leri listele
# Kısa liste
iw dev
# phy#0
# Interface wlan0
# ifindex 3
# wdev 0x1
# addr dc:a6:32:xx:xx:xx
# type managed
# channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
# Belirli interface'in ayrıntısı
iw dev wlan0 info
# Interface wlan0
# ifindex 3
# wdev 0x1
# addr dc:a6:32:xx:xx:xx
# ssid EvAgi_2.4G
# type managed
# wiphy 0
# channel 6 (2437 MHz), width: 20 MHz (no HT), center1: 2437 MHz
# txpower 31.00 dBm
Physical device (phy) bilgileri
# Donanım yeteneklerini göster
iw phy phy0 info
# Desteklenen frekanslar
iw phy phy0 info | grep -A 5 "Frequencies"
# * 2412 MHz [1] (20.0 dBm)
# * 2417 MHz [2] (20.0 dBm)
# ...
# * 5180 MHz [36] (23.0 dBm)
# Desteklenen interface modları
iw phy phy0 info | grep -A 15 "Supported interface modes"
# * IBSS
# * managed
# * AP
# * AP/VLAN
# * monitor
# * mesh point
# Desteklenen band ve MCS bilgileri
iw phy phy0 info | grep -A 20 "Band 1"
Interface oluşturma ve silme
# Yeni sanal interface ekle
iw phy phy0 interface add wlan1 type managed
# Monitor interface ekle
iw phy phy0 interface add mon0 type monitor
# Interface sil
iw dev mon0 del
02 WiFi tarama — iw dev wlan0 scan
Çevredeki ağları tara, SSID, BSSID, frekans, sinyal ve güvenlik bilgisini al.
# Temel tarama (root gerekir)
iw dev wlan0 scan
# Özet çıktı — sadece SSID ve sinyal
iw dev wlan0 scan | grep -E "SSID:|signal:"
# signal: -45.00 dBm
# SSID: EvAgi_2.4G
# signal: -62.00 dBm
# SSID: Ofis_WiFi
# Belirli kanalda tara
iw dev wlan0 scan freq 2412 2437 2462
# Flush: önbelleği temizle, yeni tarama yap
iw dev wlan0 scan flush
Tarama çıktısını parse etme
# SSID + BSSID + sinyal + kanal tablo formatı
iw dev wlan0 scan 2>/dev/null | \
awk '/^BSS/{bssid=$2} /signal:/{sig=$2} /SSID:/{ssid=$2} /freq:/{freq=$2; printf "%-20s %-18s %s dBm %s MHz\n", ssid, bssid, sig, freq}'
# Örnek çıktı:
# EvAgi_2.4G aa:bb:cc:dd:ee:01 -45.00 dBm 2437 MHz
# Ofis_WiFi aa:bb:cc:dd:ee:02 -62.00 dBm 5180 MHz
Tarama çıktısındaki alanlar
BSS aa:bb:cc:dd:ee:01(on wlan0) -- associated
last seen: 120 ms ago
TSF: 1234567890 usec (0d, 00:20:34)
freq: 2437
beacon interval: 100 TUs
capability: ESS ShortSlotTime (0x0431)
signal: -45.00 dBm
last seen: 120 ms ago
Information elements from Probe Response frame:
SSID: EvAgi_2.4G
Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
DS Parameter set: channel 6
RSN: * Version: 1
* Group cipher: CCMP
* Pairwise ciphers: CCMP
* Authentication suites: PSK
* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
HT capabilities: HT20
HT operation: * primary channel: 6
03 Link kalitesi ve sinyal gücü
Bağlı AP'den anlık sinyal, bitrate ve istatistikleri al.
# Bağlantı bilgisi
iw dev wlan0 link
# Connected to aa:bb:cc:dd:ee:01 (on wlan0)
# SSID: EvAgi_2.4G
# freq: 2437
# RX: 12345678 bytes (98765 packets)
# TX: 1234567 bytes (12345 packets)
# signal: -52 dBm
# rx bitrate: 54.0 MBit/s
# tx bitrate: 72.2 MBit/s MCS 7
# Sinyal gücünü sürekli izle
watch -n 1 "iw dev wlan0 link | grep signal"
# Station istatistikleri (paket hataları, retry, vb.)
iw dev wlan0 station dump
# Station aa:bb:cc:dd:ee:01 (on wlan0)
# inactive time: 100 ms
# rx bytes: 12345678
# rx packets: 98765
# tx bytes: 1234567
# tx packets: 12345
# tx retries: 234
# tx failed: 5
# signal: -52 [-55, -54] dBm
# signal avg: -51 [-54, -53] dBm
# Toffset: 12345678 usec
# tx bitrate: 72.2 MBit/s MCS 7 short GI
# rx bitrate: 54.0 MBit/s
dBm yorumlama tablosu
# /proc/net/wireless — link quality, signal, noise
cat /proc/net/wireless
# Inter-| sta-| Quality | Discarded packets | Missed | WE
# face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
# wlan0: 0000 55. -55. -92. 0 0 0 4 25 0
# link: 0-70 (kalite), level: dBm (sinyal), noise: dBm (gürültü)
04 Kanal ve txpower ayarı
WiFi kanalını, frekansını ve iletim gücünü manuel ayarla.
Kanal değiştirme
# Önce bağlantıyı kes (managed modda kanal değiştirmek AP bağlantısını keser)
ip link set wlan0 down
# Kanal ayarla (kanal numarasıyla)
iw dev wlan0 set channel 11
# Frekansla ayarla
iw dev wlan0 set freq 2462 # 2.4 GHz kanal 11
iw dev wlan0 set freq 5180 # 5 GHz kanal 36
# 40 MHz kanal bonding
iw dev wlan0 set freq 2437 HT40+ # 2.4 GHz kanal 6, yukarı bonding
iw dev wlan0 set freq 5180 HT40+ # 5 GHz kanal 36
ip link set wlan0 up
Transmit Power (txpower)
# Mevcut txpower'ı gör
iw dev wlan0 info | grep txpower
# txpower 20.00 dBm
# Sabit güç ayarla (mBm = dBm × 100)
iw dev wlan0 set txpower fixed 2000 # 20 dBm
iw dev wlan0 set txpower fixed 1500 # 15 dBm
# Otomatik (regulatory maksimum)
iw dev wlan0 set txpower auto
# Sınırla (bu değeri aşma)
iw dev wlan0 set txpower limit 1000 # max 10 dBm
txpower, regulatory domain tarafından sınırlandırılır. Türkiye (TR) için 2.4 GHz'de tipik sınır 20 dBm'dir. iw reg get ile mevcut sınırları kontrol et. Sınırı aşan değerler otomatik olarak düşürülür.
05 Monitor mode
Monitor mode, WiFi kartının tüm 802.11 çerçevelerini (kendi ağında olmasa bile) yakalamasını sağlar. Paket analizi ve RF izleme için gereklidir.
Monitor interface oluşturma
# Yöntem 1: Mevcut interface'i monitor'a çevir
ip link set wlan0 down
iw dev wlan0 set type monitor
ip link set wlan0 up
# Yöntem 2: Sanal monitor interface ekle (wlan0 managed olarak kalır)
iw phy phy0 interface add mon0 type monitor
ip link set mon0 up
# Monitor modunu doğrula
iw dev mon0 info
# type monitor
# Belirli kanalda dinle
iw dev mon0 set channel 6
# tcpdump ile 802.11 çerçevelerini yakala
tcpdump -i mon0 -w /tmp/wifi_capture.pcap
# Monitor modundan çık
ip link set mon0 down
iw dev mon0 del
Monitor flag'leri
# Sadece kontrol çerçeveleri (beacon, probe, auth)
iw dev mon0 set monitor control
# Diğer flag seçenekleri
# fcsfail: FCS hatası olan çerçeveleri de göster
# plcpfail: PLCP hatalı çerçeveleri göster
# cook: "cooked" mode — radiotap header'sız
# active: aktif probe gönder
# aircrack-ng ile kullanım (radiotap header gerekir)
airodump-ng mon0
aireplay-ng --test mon0
Endüstriyel IoT sistemlerinde monitor mode, RF ortamını analiz etmek için kullanılır. Raspberry Pi Zero W ile taşınabilir RF izleme cihazı yapılabilir. Ath9k sürücüsü monitor mode'u en iyi destekleyen sürücülerden biridir.
06 Station mode ve mesh mode
Normal WiFi istemci modu (managed/station) ve 802.11s mesh ağı yapılandırması.
Station (managed) modu
# Monitor'dan managed moda dön
ip link set wlan0 down
iw dev wlan0 set type managed
ip link set wlan0 up
# Managed modda manuel bağlantı (şifresiz ağ için)
iw dev wlan0 connect "AcikAg"
# Belirli BSSID'ye bağlan
iw dev wlan0 connect "EvAgi_2.4G" aa:bb:cc:dd:ee:01
# Bağlantıyı kes
iw dev wlan0 disconnect
IBSS (Ad-Hoc) modu
# Ad-hoc ağ oluştur (iki cihaz arası doğrudan bağlantı)
ip link set wlan0 down
iw dev wlan0 set type ibss
ip link set wlan0 up
iw dev wlan0 ibss join "AdHocAg" 2437
Mesh mode (802.11s)
# Mesh interface oluştur
iw phy phy0 interface add mesh0 type mp
# Mesh ağına katıl
ip link set mesh0 up
iw dev mesh0 mesh join "IoTMeshAg"
# Mesh ayarları
iw dev mesh0 set mesh_param mesh_max_peer_links 10
iw dev mesh0 set mesh_param mesh_hwmp_rootmode 4
# Mesh komşularını gör
iw dev mesh0 mpath dump
# DEST ADDR NEXT HOP IFACE SN METRIC QLEN EXPTIME DTIM DRET FLAGS
# aa:bb:cc:dd:ee:02 aa:bb:cc:dd:ee:02 mesh0 12 1024 0 1234 100 3 0x4
# Mesh station bilgileri
iw dev mesh0 station dump
802.11s mesh, birden fazla Raspberry Pi veya OpenWRT router'ın kablolama gerektirmeden ağ oluşturması için idealdir. batman-adv ile kombinlenebilir (Layer 2 mesh). Örnek: fabrika sensör ağı — her cihaz hem veri göndericisi hem yönlendirici.
07 rfkill ve regulatory domain
rfkill ile WiFi/Bluetooth donanımsal ve yazılımsal anahtarlarını yönet; regulatory domain ile kanal ve güç sınırlarını ayarla.
rfkill — kablosuz blokları yönet
# Tüm rfkill cihazlarını listele
rfkill list
# 0: phy0: Wireless LAN
# Soft blocked: no
# Hard blocked: no
# 1: hci0: Bluetooth
# Soft blocked: yes
# Hard blocked: no
# WiFi'ı yazılımsal blokla
rfkill block wifi
# WiFi'ı aç (unblock)
rfkill unblock wifi
# Bluetooth'u blokla
rfkill block bluetooth
# Tümünü blokla / aç
rfkill block all
rfkill unblock all
# Hard block (fiziksel kill switch): yazılımla açılamaz
# Laptop'larda Fn+F2 gibi fiziksel tuş ile tetiklenir
Regulatory Domain
# Mevcut regulatory domain'i göster
iw reg get
# global
# country TR: DFS-ETSI
# (2402 - 2482 @ 40), (N/A, 20), (N/A)
# (5170 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
# (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS, AUTO-BW
# (5490 - 5710 @ 160), (N/A, 27), (0 ms), DFS
# Ülke kodunu ayarla
iw reg set TR
# Kalıcı regulatory domain (CRDA ile)
# /etc/default/crda → REGDOMAIN=TR
# Tüm ülkelerin kural listesi
iw reg get 2>/dev/null | grep country
Kernel config — embedded için
# Zorunlu konfigürasyonlar
CONFIG_CFG80211=y # Wireless config framework
CONFIG_MAC80211=y # SoftMAC IEEE 802.11 yığını
CONFIG_RFKILL=y # RF Kill switch desteği
# Regulatory database
CONFIG_CFG80211_CRDA_SUPPORT=y
# Yaygın sürücüler
CONFIG_ATH9K=y # Atheros AR9xxx (yaygın USB dongle)
CONFIG_BRCMFMAC=y # Broadcom (Raspberry Pi WiFi)
CONFIG_MT76=y # MediaTek mt7612u vb.
CONFIG_RTL8XXXU=y # Realtek RTL8188 USB
# Mesh desteği
CONFIG_MAC80211_MESH=y
# Monitor mode için gereken seçenek
# CONFIG_MAC80211_DEBUGFS=y (opsiyonel, debug için)
Buildroot'ta kernel fragment ile bu config'leri ekle: board/custom/linux.config dosyasına yaz. Yocto'da linux-%.bbappend içinde KERNEL_EXTRA_FEATURES += "cfg80211 mac80211" kullan.