Linux Wireless之iw工具

概述

iw 是一款基于 nl80211 的无线设备 CLI 配置工具, 用来替代和增强旧版工具 iwconfig 。旧版工具 iwconfig 使用的是无线扩展接口,现已弃用,强烈建议切换至 iwnl80211。它基本上已支持Linux内核的所有新驱动程序。

编译安装

获取源码:

编译依赖:

  • libnl >= libnl1
  • libnl-dev >= libnl-dev-1

iw是基于 nl80211 开发的,而 nl80211 正是依赖于Netlink,所以需要libnl

常用的命令

获取设备功能

使用以下命令获取所有设备的功能,例如频段信息(2.4 GHz 和 5 GHz)以及 802.11 相关信息:

$ iw list

扫描

$ sudo iw dev wlp4s0 scan

监听事件

只需使用:

$ iw event

在调试时,查看认证/关联/去关联/取消关联帧可能会很有用,可以使用:

$ iw event -f

添加时间戳:

$ iw event -t

获取链路状态

要确定您是否已连接到 AP,以及您是否是上次使用的传输速率,您可以使用以下命令。

当连接到 AP 时的示例输出:

$ iw dev wlp4s0 link
Connected to c4:xx:xx:xx:xx:bc (on wlp4s0)
	SSID: 38F-FWQ-5G
	freq: 5785
	RX: 153930 bytes (651 packets)
	TX: 24515 bytes (166 packets)
	signal: -46 dBm
	rx bitrate: 780.0 MBit/s VHT-MCS 8 80MHz short GI VHT-NSS 2
	tx bitrate: 263.3 MBit/s VHT-MCS 6 80MHz VHT-NSS 1

	bss flags:	short-slot-time
	dtim period:	2
	beacon int:	100

未连接到 AP 时的示例输出:

$ iw dev wlp4s0 link
Not connected.

建立基本连接(未验证)

如果想直接连接到 AP,且该 AP 具有以下条件,您可以使用 iw

  • 无加密
  • 使用 WEP 进行加密 但是需要注意的是,如果断开了 AP 的连接(比如在繁忙的复杂网络环境中)需要重新发出该命令。如果不想这样做,可以使用 wpa_supplicant,它会在断开连接时自动尝试重新连接。

注:如果您需要连接到具有 WPA 或 WPA2 加密要求的 AP,则必须使用 wpa_supplicant (https://wireless.docs.kernel.org/en/latest/en/users/documentation/wpa_supplicant.html)

如果您选择自己处理断开连接的情况,可以按如下方式使用 iw connect

要连接到禁用了加密的 AP,其 SSID 为 foo:

$ iw wlan0 connect foo

假设您有两个 SSID 为 foo 的 AP,并且知道想要连接的那个位于2432频率,您可以指定要使用的频率:

$ iw wlan0 connect foo 2432

要连接到使用 WEP 的 AP,您可以使用:

$ iw wlan0 connect foo keys 0:abcde d:1:0011223344

获取站点统计信息

要获取站点统计信息,例如发送/接收字节数、上次发送速率(包括 MCS 速率)等,您可以执行:

$ iw dev wlp4s0 station dump
Station e4:60:4d:d7:b0:97 (on wlp4s0)
	inactive time:	1004 ms
	rx bytes:	83698
	rx packets:	369
	tx bytes:	17160
	tx packets:	111
	tx retries:	0
	tx failed:	0
	beacon loss:	0
	rx drop misc:	1
	signal:  	-29 [-29, -37] dBm
	signal avg:	-29 [-29, -38] dBm
	tx bitrate:	78.0 MBit/s MCS 12
	tx duration:	0 us
	rx bitrate:	173.3 MBit/s VHT-MCS 8 short GI VHT-NSS 2
	rx duration:	0 us
	authorized:	yes
	authenticated:	yes
	associated:	yes
	preamble:	long
	WMM/WME:	yes
	MFP:		yes
	TDLS peer:	no
	DTIM period:	1
	beacon interval:100
	short slot time:yes
	connected time:	17 seconds
	associated at [boottime]:	29419.200s
	associated at:	1769504688856 ms
	current time:	1769504704882 ms

针对对等方获取站点统计信息

如果您想针对站点正在通信的对等方获取特定统计信息,可以使用以下命令:

$ sudo iw dev wlp4s0 station get <peer-MAC-address>

对于 STA,上述 就是您的 AP 的 MAC 地址。

修改传输速率

iw 支持修改 TX 速率,包括传统速率和 HT MCS 速率。它通过屏蔽允许的速率来实现这一点,还允许您清除屏蔽。

修改传统 TX 速率(未验证)

您可以设置仅使用某些传统速率进行传输的偏好。例如:

iw wlan0 set bitrates legacy-2.4 12 18 24

修改 HT MCS 速率

设置使用 MCS 速率进行传输的偏好,可以通过指定频段和 MCS 速率来实现。请注意,设备是否实际听从您的请求将取决于设备驱动程序和固件的合作情况。例如:

$ sudo iw dev wlp4s0 set bitrates ht-mcs-5 4
$ sudo iw dev wlp4s0 set bitrates ht-mcs-2.4 10

要清除所有 TX 速率并恢复默认设置:

$ sudo iw dev wlp4s0 set bitrates ht-mcs-5
$ sudo iw dev wlp4s0 set bitrates ht-mcs-2.4

注: 这里ht-mcs-2.4|5也支持换成vht-mcs-2.4|5,wifi模组可能自己会动态去调节MCS速率。

设置 TX 功率

您可以使用相应 PHY 的设备接口名称来设置 txpower。

sudo iw dev <devname> set txpower <auto|fixed|limit> [<tx power in mBm>]
sudo iw phy <phyname> set txpower <auto|fixed|limit> [<tx power in mBm>]

注:此命令所采用的值是以毫贝尔-毫瓦特 (mBm) 为单位,而不是常用的分贝-毫瓦特 (dBm)。<功率 in mBm> = 100 * <功率 in dBm>

省电模式

要默认启用省电模式,您可以使用:

$ sudo iw dev wlp4s0 set power_save on

对于 mac80211 驱动程序,这意味着动态省电模式会被启用。

要查询当前省电模式设置,您可以使用:

$ iw dev wlp4s0 get power_save
Power save: on

添加和删除接口

使用 iw 添加接口

支持多种模式。支持的模式包括:

  • monitor
  • managed [also station]
  • wds
  • mesh [also mp]
  • ibss [also adhoc]

例如,要添加一个监控接口:

$ sudo iw phy phy0 interface add moni0 type monitor

其中可以将 monitor 替换为任何其他支持的模式,将 moni0 替换为接口名称,并需将 phy0 替换为硬件对应的 PHY 名称(通常默认是 phy0)。使用 ip link 列出所有接口。

要创建一个新的管理模式接口,您可以使用:

$ sudo iw phy phy0 interface add wlan10 type managed

请注意,使用 hostapd 时,接口会自动进入 AP 模式。

使用 iw 删除接口

使用:

$ sudo iw dev moni0 del

虚拟 vif 支持

官方文档有专门介绍虚拟 vif 支持,具体请参阅 https://wireless.docs.kernel.org/en/latest/en/users/documentation/iw/vif.html

更新和获取监管域

$ sudo iw reg set alpha2

其中“alpha2”是 ISO/IEC 3166 alpha2 国家代码。所使用的和设置的信息来自我们的监管基础设施。

也可以使用 wpa_supplicant 来更改监管域,只需在配置中添加“country=US”类似条目即可。

获取当前监管域:

$ iw reg get

更多

更多的比如mesh配置,wds配置可参见官方介绍文档:https://wireless.docs.kernel.org/en/latest/en/users/documentation/iw.html
或使用iw help获取帮助,它会打印出所支持的命令。