诊断工具介绍

Linux 命令行工具

iw / iwconfig

# 扫描 WiFi 网络
sudo iw dev wlan0 scan | grep -E "bssid|SSID|signal|freq"

# 查看接口信息
iw dev wlan0 info

# 查看监管域
iw reg get

# 设置监管域
sudo iw reg set CN

# 查看 PHY 能力
iw phy phy0 info

airmon-ng / airodump-ng

# 进入监控模式
sudo airmon-ng start wlan0

# 扫描所有信道
sudo airodump-ng wlan0mon

# 监听特定网络
sudo airodump-ng --bssid AA:BB:CC:DD:EE:FF --write capture wlan0mon

# 分析捕获文件
airodump-ng capture-01.cap

tcpdump / Wireshark

# 抓包(监控模式)
sudo tcpdump -i wlan0mon -w capture.pcap type mgmt

# 抓包(管理帧 + 数据帧)
sudo tcpdump -i wlan0mon -w capture.pcap 'wlan addr AA:BB:CC:DD:EE:FF'

# Wireshark 解密 WPA2:
# Edit → Preferences → Protocols → IEEE 802.11
# 添加 PMKID 或 PSK + Key Type (WPA-PBKDF2 / WPA2-SHA256)

专业 WiFi 分析工具

Ekahau Pro

功能:
├── 预测性勘测(基于楼层平面图)
├── 实时热成像(信号强度/信噪比/信道利用率)
├── AP 放置推荐
├── 容量规划模拟
└── 报告生成

硬件要求: Ekahau Sidekick 2/3(校准过的 WiFi+蓝牙适配器)

MetaGeek Chanalyzer / Stumbler

Chanalyzer (实时频谱分析):
├── 显示所有频段的实时信号强度
├── 识别非 WiFi 干扰源
├── 信道利用率热力图
└── 历史数据记录

Stumbler (网络发现):
├── 扫描并列出所有可见网络
├── 跟踪客户端关联/漫游事件
├── 信号强度趋势图
└── 导出 CSV/KML 报告

inSSIDer / WiFi Analyzer

inSSIDer (商业版):
├── 可视化信道占用图
├── 客户端发现和分析
├── 历史比较
└── 推荐最佳信道配置

WiFi Analyzer (免费, Android/Windows):
├── 基础信道扫描
├── 信号强度显示
└── 快速干扰检查

嵌入式 WiFi 调试工具

MediaTek MTK 专用工具

# connMan / wpa_supplicant 日志
journalctl -u wpa_supplicant -f
journalctl -u connman -f

# iwpriv (MTK 私有扩展)
iwpriv wlan0 get_driver_version
iwpriv wlan0 get_mac_addr
iwpriv wlan0 set_txpower 20    # 设置发射功率 (dBm)
iwpriv wlan0 get_rssi          # 获取当前 RSSI

# MTK debugfs 接口
cat /sys/kernel/debug/ieee80211/phy0/statistics/pep_info
cat /sys/kernel/debug/ieee80211/phy0/mac80211/tx_dropped

wpa_supplicant 调试

# 启动 wpa_supplicant(详细日志)
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d -dd

# 关键日志信息:
# CTRL-EVENT-CONNECTED → 成功关联
# WPA: 4-Way Handshake completed → 密钥协商完成
# CTRL-EVENT-DISCONNECTED → 断开连接(查看 reason code)

# Reason Code 参考:
# 3 = 解除认证(正常断开)
# 4 = 关联失效(AP 主动断开)
# 6 = 离开 BSS(客户端漫游)
# 7 = 不关联(AP 拒绝)
# 8 = 站未确认 → 信号差或干扰

自动化诊断脚本示例

#!/bin/bash
# wifi-diag.sh - WiFi 快速诊断脚本

IFACE="wlan0"

echo "=== WiFi Quick Diagnostic ==="
echo ""

echo "--- Interface Status ---"
ip link show $IFACE | head -2
iw dev $IFACE info | grep -E "ssid|freq|rssi|signal"
echo ""

echo "--- Connected AP Info ---"
iw dev $IFACE station dump | head -20
echo ""

echo "--- Regulatory Domain ---"
iw reg get | head -5
echo ""

echo "--- MAC Statistics ---"
for stat in retired dropped missed beacon_miss; do
    val=$(cat /sys/class/net/$IFACE/phy80211/statistics/$stat 2>/dev/null || echo "N/A")
    printf "%-15s: %s\n" "$stat" "$val"
done
echo ""

echo "--- Neighbor APs (top 10) ---"
sudo iw dev $IFACE scan 2>/dev/null | grep -E "bssid|SSID|signal" | paste - - - | column -t | head -10