wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant与wpa_cli两个程序。wpa_supplicant是服务端,wap_cli是客户端,一般情况下使用wpa_cli就可以操作WiFi。但是它不支持所有的驱动,可以浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好SSID的无线网络,也就是使用前需要配置好wpa_supplicant的配置文件wpa_supplicant.conf
看下wpa_supplicant的help信息
[root@eufy /oem]$ wpa_supplicant -help
wpa_supplicant v2.6
usage:
wpa_supplicant [-BddhKLqqtvW] [-P<pid file>] [-g<global ctrl>] \
[-G<group>] \
-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \
[-b<br_ifname>] [-e<entropy file>] [-f<debug file>] \
[-o<override driver>] [-O<override ctrl>] \
[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \
[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]
drivers:
nl80211 = Linux nl80211/cfg80211
wext = Linux wireless extensions (generic)
wired = Wired Ethernet driver
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-f = log output to debug file instead of stdout
-g = global ctrl_interface
-G = global ctrl_interface group
-h = show this help text
-i = interface name
-I = additional configuration file
-K = include keys (passwords, etc.) in debug output
-L = show license (BSD)
-M = start describing new matching interface
-N = start describing new interface
-o = override driver parameter for new interfaces
-O = override ctrl_interface parameter for new interfaces
-p = driver parameters
-P = PID file
-q = decrease debugging verbosity (-qq even less)
-t = include timestamp in debug messages
-v = show version
-W = wait for a control interface monitor before starting
example:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf
选项 | 说明 |
---|---|
-b | optional bridge interface name 增加网桥名称 |
-B | run daemon in the background后台执行 |
-c | Configuration file 附加配置文件,即根据配置文件执行操作 |
-C | ctrl_interface parameter (only used if -c is not) 控制网口参数 |
-i | interface name 设定操作的网口 |
-d | increase debugging verbosity (-dd even more)增加调试信息输出 |
-D | driver name (can be multiple drivers: nl80211,wext) 驱动名称 |
-g | global ctrl_interface 全局网口配置 |
-K | include keys (passwords, etc.) in debug output 在debug输出中包含keys |
-t | include timestamp in debug messages 将各个debug信息前输出时间标签 |
-h | show this help text显示帮助信息 |
-L | show license (GPL and BSD) 显示license |
-o | override driver parameter for new interfaces 覆盖driver参数 |
-O | override ctrl_interface parameter for new interfaces 覆盖ctrl_interface参数 |
-p | driver parameters 携带驱动参数 |
-P | PID file进程文件 |
-q | decrease debugging verbosity (-qq even less)在debug 中不输出指定参数 |
-v | show version 显示版本信息 |
-W | wait for a control interface monitor before starting 启动前等待控制接口 |
-N | start describing new interface 启动对新接口的描述 |
-f | log output to debug file instead of stdout log的输出文件 |
wpa_supplicant配置文件wpa_supplicant.conf的可配置选项太多,先了解下常用的配置项。看个例子:
cat wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
scan_ssid=1
ssid="mr112"
psk="123456789"
key_mgmt=WPA-PSK
}
配置项 | 说明 |
---|---|
ctrl_interface | 默认的也是推荐使用的存放套接字的目录,wpa_cli将会在尝试和wpa_supplicant连接时使用它 |
ap_scan | 接入点的扫描和选择 |
scan_ssid | =0不扫描这个通过特定的探测请求帧得到的SSID(默认)=1扫描通过特定探测请求帧得到的SSID(这个可以用于寻找不接受广播的APs或者使用多SSIDs ;这个将会增加扫描延时时间,所以在有必要时才激活此选项) |
ssid | 无线名称 |
psk | 无线密码 |
key_mgmt | 公认的认证密钥管理协议列表,WPA-PSK 预共享密匙 (这需要‘psk’字段) |
另外,如果需要休眠唤醒功能,则加wowlan_triggers=any配置
wpa_supplicant -B -i wlan0 -c /data/cfg/wpa_supplicant.confg -f /tmp/wap.log
选项 | 说明 |
---|---|
scan | 打开后扫描AP |
scan_results或scan_r | 显示扫描结果 |
status | 列出目前的联网状态。 |
list_networks | 列出所有备选网络。目前正连接到的网络会标[CURRENT],禁用的网络会标[DISABLE]。 |
add_network | 增加一个备选网络,输出新网络的号码(这个号码替代下文的[network_id])。注意新网络此时是禁用状态。 |
set_network [network_id] ssid “Your SSID” | 设置无线网的名称(SSID) |
set_network [network_id] key_mgmt WPA-PSK | 设置无线网的加密方式为WPA-PSK/WPA2-PSK |
set_network [network_id] psk “Your Password” | 设置无线网的PSK密码 |
enable_network [network_id] | 启用网络。启用后如果系统搜索到了这个网络,就会尝试连接。 |
disable_network [network_id] | 禁用网络。 |
save_config | 保存配置。 |
[root@eufy /oem]$ wpa_cli scan
Selected interface 'wlan0'
OK
[root@eufy /oem]$ wpa_cli scan_result
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
2a:47:3d:62:21:fb 2462 -16 [WPA2-PSK-CCMP][ESS] mr112
64:6e:97:0c:c9:68 2462 -51 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] LdRobotAp-2.4
f8:8c:21:67:6b:67 2462 -28 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] app\xe7\xbb\x84
80:ea:07:81:24:85 2462 -75 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] YAKO_2.4G
f8:8c:21:67:6b:69 5785 -32 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] app\xe7\xbb\x84-5G
74:22:bb:89:0c:34 5180 -38 [WPA2-PSK-CCMP][ESS] WFW_5G
2c:15:e1:3d:ba:0d 5745 -37 [WPA2-PSK-CCMP][ESS] ASUS_0B_5G
48:0e:ec:8d:4f:7f 5805 -40 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] TP-LINK_4F7D
[root@eufy /oem]$ wpa_cli status
Selected interface 'wlan0'
bssid=2a:47:3d:62:21:fb
freq=2462
ssid=mr112
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.191.5
address=20:32:33:38:32:72