当前位置: 首页 > news >正文

iw 命令 -- linux 无线管理

iw 命令入门

  • 1. 概述
    • 1.1 基本概念
  • 2. iw --help 命令分析
  • 3. 核心命令
    • 3.1 查看
    • 3.2 扫描
    • 3.3 连接
    • 3.4 接口管理
  • 4. 实用脚本
    • 4.1 脚本1:WiFi 连接检查器
    • 4.2 脚本2:WiFi 热点创建器
    • 4.3 脚本语法详解
      • Shebang 解释器声明
      • 变量定义和使用
      • 条件判断语法
      • 权限检查详解
      • Here Document 语法
      • 命令执行和检查
      • 定时任务 crontab
    • 4.4 脚本使用方法详解
      • 创建和运行脚本
      • 权限说明
      • 脚本作用说明
  • 5. 串口环境使用
    • 5.1 直接命令输入
    • 5.2 脚本执行方式
  • 6. 常用命令速查
    • 6.1 快速连接
    • 6.2 状态检查
    • 6.3 信号监控
    • 6.4 热点检查
  • 7. 故障排查
    • 7.1 常见问题诊断
    • 7.2 重置网络接口

1. 概述

iw 是 Linux 系统中用于配置和管理无线网络设备的命令行工具。它基于 nl80211 内核接口,是现代无线网络管理的标准工具。

1.1 基本概念

  • PHY(物理设备):无线芯片硬件,如 phy0
  • DEV(逻辑接口):网络接口,如 wlan0、mon0
  • SSID:无线网络名称
  • BSSID:AP 的 MAC 地址

2. iw --help 命令分析

执行 iw --help | head -n 50 会显示以下内容:

Usage: iw [options] command
Options:
–debug enable netlink debugging
–version show version (5.9)
Commands:
dev ap stop
Stop AP functionality
dev ap start
[5|10|20|40|80|80+80|160] [<center1_freq> [<center2_freq>]] [hidden-ssid|zeroed-ssid] head [tail ] [inactivity-time ] [key0:abcde d:1:6162636465]
phy coalesce show
Show coalesce status.
phy coalesce disable
Disable coalesce.
phy coalesce enable
Enable coalesce with given configuration.
The configuration file contains coalesce rules:
delay=
condition=
patterns=<[offset1+],<[offset2+],…>
delay=
condition=
patterns=<[offset1+],<[offset2+],…>

delay: maximum coalescing delay in msec.
condition: 1/0 i.e. ‘not match’/‘match’ the patterns
patterns: each pattern is given as a bytestring with ‘-’ in
places where any byte may be present, e.g. 00:11:22:-:44 will
match 00:11:22:33:44 and 00:11:22:33:ff:44 etc. Offset and
pattern should be separated by ‘+’, e.g. 18+43:34:00:12 will
match ‘43:34:00:12’ after 18 bytes of offset in Rx packet.
dev auth type:open|shared [key 0:abcde d:1:6162636465]
Authenticate with the given network.
dev connect [-w] [] [] [key 0:abcde d:1:6162636465] [mfp:req/opt/no]
Join the network with the given SSID (and frequency, BSSID).
With -w, wait for the connect to finish or fail.
dev disconnect
Disconnect from the current network.
dev cqm rssi <threshold|off> []

符号含义说明:

  • [] 方括号:可选参数
  • < > 尖括号:必填参数
  • | 竖线:多选一
  • … 省略号:可重复参数

主要选项解释:

  • –debug:启用调试模式,显示详细的内核通信信息。用于排查连接问题。示例:iw --debug dev wlan0 scan
  • –version:显示 iw 工具版本号。示例:iw --version

常见命令格式解析:

  • dev <devname> connect [-w] <SSID> [<freq>] [<bssid>]:其中 必须指定接口名如 wlan0,[-w] 是可选的等待参数,<SSID> 必须指定网络名称,[<freq>] 和 [<bssid>] 是可选参数
iw dev wlan0 connect MyHomeWiFi
iw dev wlan0 connect -w Office_NET 5180
iw dev wlan0 connect -w Cafe_Guest 2462 00:11:22:33:44:55

3. 核心命令

3.1 查看

查看所有无线接口:iw dev

查看物理设备信息:iw phy

查看接口详细信息:iw dev wlan0 info

查看硬件能力:iw list

3.2 扫描

基础扫描:iw dev wlan0 scan

扫描特定网络:iw dev wlan0 scan ssid "MyWiFi"

被动扫描(不发送探测包):iw dev wlan0 scan passive

3.3 连接

连接开放网络:iw dev wlan0 connect "OpenWiFi"

连接并等待结果:iw dev wlan0 connect -w "MyWiFi"

断开连接:iw dev wlan0 disconnect

查看连接状态:iw dev wlan0 link

3.4 接口管理

创建监控接口:iw phy phy0 interface add mon0 type monitor

删除接口:iw dev mon0 del

改变接口类型:iw dev wlan0 set type monitor

4. 实用脚本

4.1 脚本1:WiFi 连接检查器

文件:保存为 /usr/local/bin/wifi-check.sh

#!/bin/bash# WiFi 连接检查脚本
# 用途:检查 WiFi 连接状态,断线时自动重连INTERFACE="wlan0"
SSID="MyWiFi"
LOG_FILE="/var/log/wifi-check.log"# 记录日志函数
log_message() {echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}# 检查接口是否存在
if ! iw dev | grep -q "$INTERFACE"; thenlog_message "错误:接口 $INTERFACE 不存在"exit 1
fi# 检查当前连接状态
CONNECTION_STATUS=$(iw dev $INTERFACE link)if echo "$CONNECTION_STATUS" | grep -q "Connected"; then# 已连接,显示信息CURRENT_SSID=$(echo "$CONNECTION_STATUS" | grep "SSID" | cut -d' ' -f2-)SIGNAL=$(echo "$CONNECTION_STATUS" | grep "signal" | cut -d' ' -f2-)echo "已连接到:$CURRENT_SSID"echo "信号强度:$SIGNAL"log_message "连接正常 - SSID: $CURRENT_SSID, 信号: $SIGNAL"
else# 未连接,尝试重连echo "未连接,正在尝试连接到 $SSID..."log_message "开始重连到 $SSID"# 先扫描确认网络存在if iw dev $INTERFACE scan | grep -q "SSID: $SSID"; then# 网络存在,尝试连接iw dev $INTERFACE connect "$SSID"sleep 5# 检查连接结果if iw dev $INTERFACE link | grep -q "Connected"; thenecho "重连成功!"log_message "重连成功到 $SSID"elseecho "重连失败"log_message "重连失败到 $SSID"fielseecho "找不到网络 $SSID"log_message "扫描未找到网络 $SSID"fi
fi

4.2 脚本2:WiFi 热点创建器

文件:保存为 /usr/local/bin/create-hotspot.sh

#!/bin/bash# WiFi 热点创建脚本
# 用途:快速创建一个简单的 WiFi 热点用于测试HOTSPOT_NAME="TestHotspot"
CHANNEL="6"
INTERFACE="wlan0"echo "=== WiFi 热点创建器 ==="# 检查是否以 root 运行
if [ "$EUID" -ne 0 ]; thenecho "错误:此脚本需要 root 权限运行"echo "请使用:sudo $0"exit 1
fi# 检查接口是否存在
if ! iw dev | grep -q "$INTERFACE"; thenecho "错误:接口 $INTERFACE 不存在"echo "可用接口:"iw dev | grep Interface | cut -d' ' -f2exit 1
fi# 检查接口是否支持 AP 模式
if ! iw list | grep -A10 "Supported interface modes" | grep -q "AP"; thenecho "错误:硬件不支持 AP 模式"exit 1
fiecho "1. 断开现有连接..."
iw dev $INTERFACE disconnect 2>/dev/nullecho "2. 设置接口为 AP 模式..."
if ! iw dev $INTERFACE set type ap; thenecho "错误:无法设置 AP 模式"exit 1
fiecho "3. 启动网络接口..."
ip link set $INTERFACE upecho "4. 设置工作信道 $CHANNEL..."
if ! iw dev $INTERFACE set channel $CHANNEL; thenecho "错误:无法设置信道"exit 1
fiecho "5. 分配 IP 地址..."
ip addr add 192.168.10.1/24 dev $INTERFACEecho "=== 热点配置完成 ==="
echo "热点名称:$HOTSPOT_NAME"
echo "工作信道:$CHANNEL"
echo "接口地址:192.168.10.1"
echo ""
echo "注意:这只是基础配置"
echo "完整热点功能需要配置 hostapd 和 dnsmasq"
echo ""
echo "查看接口状态:"
iw dev $INTERFACE infoecho ""
echo "停止热点请运行:"
echo "sudo iw dev $INTERFACE set type managed"
echo "sudo dhclient $INTERFACE"

4.3 脚本语法详解

Shebang 解释器声明

#!/bin/bash 中的 #! 叫做 shebang,告诉系统用哪个解释器运行这个脚本:

  • #!:shebang 标记
  • /bin/bash:bash 解释器的路径
  • 作用:当你执行 ./script.sh 时,系统知道用 bash 来执行这个脚本

变量定义和使用

INTERFACE="wlan0"        # 定义变量
echo "$INTERFACE"        # 使用变量,$符号取值
echo "${INTERFACE}_backup"  # 花括号避免歧义

条件判断语法

if [ condition ]; then   # if 开始# 执行代码
else                     # 可选的 else# 执行代码
fi                       # fi 结束 if 语句# 常见条件:
if [ "$EUID" -ne 0 ]; then     # -ne 表示 "不等于"
if ! command; then             # ! 表示 "非",命令失败时执行
if echo "$text" | grep -q "word"; then  # 检查文本包含某个词

权限检查详解

if [ "$EUID" -ne 0 ]; thenecho "需要 root 权限"exit 1
fi
  • $EUID:当前用户的有效用户ID,root用户ID是0
  • -ne:不等于(not equal)
  • exit 1:退出脚本,返回错误码1

Here Document 语法

cat > /tmp/wifi-connect.sh << 'EOF'
#!/bin/bash
echo "Hello World"
EOF
  • cat >:将内容写入文件
  • << 'EOF':Here Document 开始标记,EOF是结束标记
  • 单引号防止变量替换,双引号允许变量替换
  • EOF:结束标记,必须单独一行

命令执行和检查

CONNECTION_STATUS=$(iw dev $INTERFACE link)  # 执行命令并保存输出
if ! iw dev | grep -q "$INTERFACE"; then     # 命令失败时(! 表示取反)

定时任务 crontab

sudo crontab -e                    # 编辑定时任务
*/1 * * * * /path/to/script.sh     # 每分钟执行一次
  • crontab -e:编辑当前用户的定时任务
  • */1 * * * *:时间格式(分 时 日 月 周)
  • */1:每分钟

4.4 脚本使用方法详解

创建和运行脚本

  1. 创建脚本文件:sudo nano /usr/local/bin/wifi-check.sh
  2. 设置执行权限:sudo chmod +x /usr/local/bin/wifi-check.sh
  3. 运行脚本:sudo /usr/local/bin/wifi-check.shsudo ./wifi-check.sh

权限说明

  • chmod +x:给文件添加可执行权限
  • sudo:以管理员权限运行,因为网络配置需要高权限
  • ./script.sh:当前目录下执行脚本

脚本作用说明

脚本中的变量如 INTERFACE="wlan0" 的作用:

  • 方便修改:只需改一处就能改变整个脚本的行为
  • 代码可读:变量名比硬编码的值更易理解
  • 减少错误:避免在多处重复输入可能出错

5. 串口环境使用

5.1 直接命令输入

在 Linux 串口终端中,所有 iw 命令都可以直接输入:

这些命令可以直接在串口终端执行:iw deviw dev wlan0 scaniw dev wlan0 connect "MyWiFi"iw dev wlan0 link

5.2 脚本执行方式

方式1:直接粘贴执行(简单命令)
可以直接在串口中逐行输入:
iw dev wlan0 disconnect
sleep 2
iw dev wlan0 connect "MyWiFi"
iw dev wlan0 link

方式2:创建临时脚本
在串口中创建临时脚本:

cat > /tmp/wifi-connect.sh << 'EOF'
#!/bin/bash
iw dev wlan0 scan | grep "MyWiFi"
if [ $? -eq 0 ]; theniw dev wlan0 connect "MyWiFi"echo "连接命令已发送"
elseecho "未找到目标网络"
fi
EOFchmod +x /tmp/wifi-connect.sh
/tmp/wifi-connect.sh

6. 常用命令速查

6.1 快速连接

扫描并连接:iw dev wlan0 scan | grep -i "mywifi" 然后 iw dev wlan0 connect "MyWiFi"

6.2 状态检查

一键检查状态:iw dev wlan0 link && echo "已连接" || echo "未连接"

6.3 信号监控

持续监控信号(Ctrl+C 退出):

while true; do iw dev wlan0 link | grep signalsleep 2
done

6.4 热点检查

查看周围热点:iw dev wlan0 scan | grep -E "(SSID|signal|freq)"

7. 故障排查

7.1 常见问题诊断

检查驱动是否正常:lsmod | grep -i wirelessdmesg | grep -i wireless

检查接口状态:ip link show wlan0iw dev wlan0 info

检查无线功能:rfkill list

7.2 重置网络接口

完全重置无线接口:
ip link set wlan0 down
iw dev wlan0 set type managed
ip link set wlan0 up

http://www.dtcms.com/a/276900.html

相关文章:

  • 利用 MySQL 进行数据清洗
  • C++类和对象(一)
  • Intel英特尔ICH7R/ICH8R/ICH9R/ICH10R系列下载地址--intel_msm_8961002 下载 Version 8.9.6.1002
  • 001_Claude开发者指南介绍
  • UNet改进(22):融合CNN与Transformer的医学图像分割新架构
  • MaxCompute过程中常见的数据倾斜场景以及对应的解决方案
  • std::sort的核心设计思想
  • C++:宏
  • python暑假课第三次作业
  • 从爆红到跑路:AI明星Manus为何仅用四个月就“抛弃”了中国?
  • 详解缓存淘汰策略:LFU
  • macOS - Chrome 关闭自动更新
  • 12.1 MMU配置与管理
  • 人工智能之数学基础:神经网络的矩阵参数求导
  • 基于CMMI的软件质量管理体系深度解析
  • 初级网安作业笔记1
  • 2025上海市“星光计划“信息安全管理与评估赛项二三阶段任务书
  • 【leetcode】字符串,链表的进位加法与乘法
  • 贝叶斯状态空间神经网络:融合概率推理和状态空间实现高精度预测和可解释性
  • 新手向:使用Python构建高效的日志处理系统
  • Linux系统之iprdbg 命令详解
  • 12.4 内存隔离与保护
  • 《Llama: The Llama 3 Herd of Models》预训练数据篇——论文精读笔记
  • Linux | 数据库操作基础
  • EVO-0:具有隐空间理解的视觉-语言-动作模型
  • 维基艺术图片: 构建模型 (3)
  • 应用层协议和JSON的使用
  • 文心大模型4.5开源测评:轻量化部署实践与多维度能力验证
  • 贝尔量子实验设想漏洞
  • 云服务器的基础使用