下面我将详细介绍 hostapd_cli 的使用方法、常用命令参数以及一些实际应用场景。

(图片来源网络,侵删)
基本用法
hostapd_cli 通常需要与一个正在运行的 hostapd 实例通信,通信方式有两种:
- 控制接口(Control Interface):这是最常用的方式。
hostapd在启动时会创建一个Unix域套接字文件(/var/run/hostapd或/var/run/hostapd/wlan0ap),hostapd_cli通过这个文件与hostapd通信。 - Unix域套接字文件:直接指定套接字文件的路径。
启动 hostapd 并启用控制接口
确保你的 hostapd 配置文件(hostapd.conf)中启用了控制接口。
# 在 hostapd.conf 中添加或修改以下行 ctrl_interface=/var/run/hostapd ctrl_interface_group=0 # 通常是0,表示root用户组
然后启动 hostapd:
sudo hostapd -B /etc/hostapd/hostapd.conf # -B 表示在后台运行
连接到 hostapd
-
交互模式:这是最常用的方式,连接后可以输入命令并看到即时反馈。
(图片来源网络,侵删)# hostapd_cli 会自动在 /var/run/hostapd 目录下查找对应的控制接口文件 sudo hostapd_cli # 如果你的接口名不是默认的,或者控制接口在别处,可以指定 # sudo hostapd_cli -i wlan0ap # sudo hostapd_cli -p /path/to/your/control_socket
-
单次命令模式:执行一个命令后立即退出,非常适合在脚本中使用。
# 查看状态 sudo hostapd_cli status # 扫描附近的BSS sudo hostapd_cli bss_scan
核心命令参数详解
以下是 hostapd_cli 最常用和最重要的命令,按功能分类。
连接与交互
| 命令 | 描述 | 示例 |
|---|---|---|
help |
显示所有可用命令的帮助信息。 | help |
interface |
显示或设置当前交互的接口。 | interface (显示当前接口) |
level |
显示或设置日志级别。 | level 2 (设置日志级别为2) |
quit 或 exit |
退出 hostapd_cli 交互式会话。 |
quit |
状态与信息查询
| 命令 | 描述 | 示例 |
|---|---|---|
status |
最常用,显示 hostapd 的详细运行状态,包括BSSID、SSID、频率、模式、客户端数量等。 |
status |
mib |
显示 MIB (Management Information Base) 信息,内容比 status 更底层和详细。 |
mib |
sta_list |
列出所有已连接客户端的列表。 | sta_list |
get <name> |
获取某个特定配置项的当前值。 | get ssid (获取当前SSID) |
ping |
向 hostapd 发送一个ping请求,检查连接是否正常。hostapd 应返回 PONG。 |
ping |
客户端管理
| 命令 | 描述 | 示例 |
|---|---|---|
all_sta |
显示所有已连接客户端的详细MIB信息,包括信号强度、速率、连接时长等。 | all_sta |
new_sta <MAC> |
为一个新客户端(通过其MAC地址指定)准备关联,但实际关联仍需客户端发起。 | new_sta AA:BB:CC:DD:EE:FF |
deauthenticate <MAC> |
强制断开指定MAC地址的客户端连接。 | deauthenticate AA:BB:CC:DD:EE:FF |
disassociate <MAC> |
与 deauthenticate 类似,但发送的是解除关联帧而不是解除认证帧。 |
disassociate AA:BB:CC:DD:EE:FF |
网络、信道与配置管理
| 命令 | 描述 | 示例 |
|---|---|---|
reload |
非常有用,在不中断当前客户端连接的情况下,重新加载 hostapd.conf 配置文件,修改SSID、密码等后使用此命令即可生效,无需重启。 |
reload |
channel <channel> |
动态更改工作信道。 | channel 6 |
chanlist |
显示当前支持的信道列表。 | chanlist |
bss_load <value> |
设置BSS负载报告的阈值。 | bss_load 1000 |
enable |
启用AP。 | enable |
disable |
禁用AP。 | disable |
nas_identifier <identifier> |
设置NAS标识符。 | nas_identifier my_nas |
调试与故障排查
| 命令 | 描述 | 示例 |
|---|---|---|
logdump |
调试神器,显示 hostapd 和驱动程序之间的所有控制接口消息,对于排查连接问题非常有用。 |
logdump |
relog |
重新打开日志文件。 | relog |
raw <command> |
发送原始命令到 hostapd,通常用于开发或高级调试。 |
raw |
实际应用场景示例
场景1:查看AP状态和连接的设备
# 1. 进入 hostapd_cli 交互模式 sudo hostapd_cli # 2. 在 hostapd_cli> 提示符下输入命令 hostapd_cli> status # 输出示例: # iface=wlan0ap # state=ENABLED # ssid=My_AP # ... # num_sta=2 # 表示有2个设备连接 # 3. 查看具体是哪些设备 hostapd_cli> sta_list # 输出示例: # aa:bb:cc:dd:ee:ff # 11:22:33:44:55:66 # 4. 查看某个设备的详细信息 hostapd_cli> all_sta # 会列出每个客户端的详细信息,包括信号强度(RX), 发送速率等 # 5. 退出 hostapd_cli> quit
场景2:修改WiFi密码后立即生效
- 修改
hostapd.conf文件中的wpa_passphrase。 - 无需重启
hostapd,直接在终端执行单次命令:sudo hostapd_cli reload
- 所有已连接的客户端会短暂断开,然后需要重新输入新密码连接。
场景3:踢掉某个特定设备
假设你发现一个不明设备连接到了你的AP,MAC地址为 XX:XX:XX:XX:XX:XX。
# 方法一:使用单次命令 sudo hostapd_cli deauthenticate XX:XX:XX:XX:XX:XX # 方法二:进入交互模式 sudo hostapd_cli hostapd_cli> deauthenticate XX:XX:XX:XX:XX:XX hostapd_cli> quit
场景4:调试连接问题
如果设备无法连接到AP,可以开启 logdump 来观察交互过程。

(图片来源网络,侵删)
# 1. 在一个终端窗口打开 logdump sudo hostapd_cli hostapd_cli> logdump # 这个命令会持续打印日志,不要退出 # 2. 在另一个终端,尝试用手机或电脑连接这个WiFi # 观察第一个终端窗口的输出,可以看到认证、关联等每一步的详细信息,从而定位问题所在。
hostapd_cli 本身的命令行参数
在使用 hostapd_cli 时,也可以直接在命令行传入参数来控制其行为。
| 参数 | 描述 |
|---|---|
-p <path> |
指定 hostapd 控制接口的路径,默认是 /var/run/hostapd。 |
-i <ifname> |
指定要连接的 hostapd 实例的接口名称。 |
-a <path> |
指定一个外部程序路径,当有客户端连接或断开时,hostapd 会调用该程序并传递客户端MAC地址作为参数。 |
-B |
在后台运行 hostapd_cli,通常与 -a 一起使用,以守护进程方式运行监控脚本。 |
-P <pid_file> |
指定PID文件的路径。 |
-v |
显示 hostapd_cli 的版本信息。 |
-h |
显示帮助信息。 |
示例:
# 连接到接口名为 wlan0ap 的 hostapd 实例 sudo hostapd_cli -i wlan0ap status # 运行一个监控脚本,当有客户端连接时执行 /path/to/client_script.sh sudo hostapd_cli -a /path/to/client_script.sh -B
希望这份详细的指南能帮助你更好地使用 hostapd_cli!
