背景
在使用Wpa_supplicant 工具調試Linux的wifi的時候,發現有一些問題。特此記錄一下。有些問題是遇到的並已經有了解決方法,一些問題比較發雜,只能作為思路。
問題以及解決辦法
1.沒有在后台運行的錯誤
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
解決辦法:
讓 wpa_supplicant
運行在后台,例如:
nohup wpa_supplicant -c wpa.conf > /tmp/wpa_supplicant.log &
2.傳參有問題
Failed to connect to non-global ctrl_ifname: wlan0 error: No such file or directory
解決方法:-i
指定的參數所在的設備名錯誤,可以通過ifconfig
查看以后自行改正,一般是因為沒有正確的網卡驅動。
3.服務多開導致的問題
ctrl_iface exists and seems to be in use - cannot override it
Delete ‘/var/run/wpa_supplicant/wlo1’ manually if it is not used anymore
Failed to initialize control interface ‘/var/run/wpa_supplicant’.
You may have another wpa_supplicant process already running or the file was
left by an unclean termination of wpa_supplicant in which case you will need
to manually remove this file before starting wpa_supplicant again.
解決方法:系統已經存在打開的多個wpa_supplicant
實例,執行killall wpa_supplicant
殺死所有wpa_supplicant
即可。
4.內核沒有對應驅動導致的錯誤
rfkill: Cannot open RFKILL control device
解決方法:
內核添加對應的驅動即可。
Networking support
<*> RF switch subsystem support --->
[*] Power off on suspend (NEW)
<*> Generic rfkill regulator driver
5:在ASSOCIATING
階段由於丟包導致ASSOC REJECT
Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED bssid=08:cc:68:9e:ac:20 reason=3 locally_generated=1]
I/wpa_supplicant(23065): wlan0: CTRL-EVENT-ASSOC-REJECT bssid=0e:bd:51:c7:b6:33 status_code=1
解決方法
6.在4WAY_HANDSHAKE
階段由於密碼錯誤、丟幀或者弱信號丟包導致WRONG_KEY
:
分為以下情況:
- 密碼錯誤在
4WAY_HANDSHAKE
階段中的2/4次握手會顯示wrong key
。
如果已經連接過則顯示:
01-01 23:19:01.778 I/wpa_supplicant(19043): wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=1 ssid="Onetouch Idol 3 (4.7)" > auth_failures=1 duration=5 reason=WRONG_KEY。
- 丟幀導致連接斷開:
Line 127671:< 3>[86294.177961] wlan: [24597:E :PE ] limHandleMissedBeaconInd: 2121: Sending EXIT_BMPS_IND to SME due to Missed beacon from FW
- 信號弱導致斷開:
02-28 21:56:59.703 I/wpa_supplicant(31023): wlan0: CTRL-EVENT-DISCONNECTED bssid=c8:3a:35:2b:71:30 reason=0
02-28 21:56:59.713 E/WifiStateMachine( 821): NETWORK_DISCONNECTION_EVENT in connected state BSSID=c8:3a:35:2b:71:30 RSSI=-89 freq=2437 was debouncing=false reason=0 ajst=0
# reason=0表示因為信號弱而斷開。
7:4WAY_HANDSHAK
成功但DHCP FAILURE
(四步握手成功但獲取IP地址失敗)
03-14 14:21:59.681 E/WifiStateMachine(28360): WifiStateMachine DHCP failure count=0
03-14 14:21:59.705 E/WifiConfigStore(28360): message=DHCP FAILURE
8.被AP踢出,這個原因需要sniffer log分析
reason=2,reason=7,reason=15代表被AP踢出,在kernel log中可以找到對應的deauth信息。
03-14 14:21:29.932 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-DISCONNECTED bssid=c4:14:3c:29:47:05 reason=7
< 3>[86553.353983] wlan: [28055:E :PE ] limProcessDeauthFrame: 144: Received Deauth frame for Addr: 44:a4:2d:52:bc:a5 (mlm state = eLIM_MLM_LINK_ESTABLISHED_STATE, sme state = 12 systemrole = 3) with reason code 7 from c4:14:3c:29:47:05
03-14 14:20:03.274 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-DISCONNECTED bssid=1c:1d:86:e9:e2:85 reason=15
<3>[86568.199309] wlan: [28055:E :PE ] limProcessDeauthFrame: 144: Received Deauth frame for Addr: 44:a4:2d:52:bc:a5 (mlm state = eLIM_MLM_LINK_ESTABLISHED_STATE, sme state = 12 systemrole = 3) with reason code 15 from 1c:1d:86:e9:e2:85
03-14 13:42:24.354 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-DISCONNECTED bssid=c4:14:3c:29:47:25 reason=2
< 3>[85195.665538] wlan: [28055:E :PE ] limProcessDeauthFrame: 144: Received Deauth frame for Addr: 44:a4:2d:52:bc:a5 (mlm state = eLIM_MLM_LINK_ESTABLISHED_STATE, sme state = 12 systemrole = 3) with reason code 2 from c4:14:3c:29:47:25
9.在信號相差5-10rssi的時候會發生roam,roam是在firmware層發生的,不會斷開。
03-14 14:19:24.774 I/WifiHAL (28360): event received NL80211_CMD_ROAM, vendor_id = 0x0
03-14 14:19:24.781 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-CONNECTED - Connection to c4:14:3c:29:47:25 completed [id=0 id_str=]
03-14 14:19:30.298 I/WifiHAL (28360): event received NL80211_CMD_ROAM, vendor_id = 0x0
03-14 14:19:30.316 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-CONNECTED - Connection to c4:14:3c:29:47:05 completed [id=0 id_str=]
03-14 14:19:48.681 I/WifiHAL (28360): event received NL80211_CMD_ROAM, vendor_id = 0x0
03-14 14:20:00.162 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-CONNECTED - Connection to 1c:1d:86:e9:e2:85 completed [id=0 id_str=]
10.在打開auoto join
的情況下,也會發生roam,也不會斷開
03-14 12:09:32.171 E/WifiStateMachine(28360): WifiStateMachine shouldSwitchNetwork txSuccessRate=0.00 rxSuccessRate=0.00 delta 1000 -> 1000
03-14 12:09:34.505 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-CONNECTED - Connection to 6c:99:89:b0:01:85 completed [id=0 id_str=]
03-14 12:09:55.132 I/wpa_supplicant(28064): wlan0: CTRL-EVENT-DISCONNECTED bssid=6c:99:89:b0:01:85 reason=0
03-14 13:10:51.805 E/WifiStateMachine(28360): WifiStateMachine shouldSwitchNetwork txSuccessRate=0.00 rxSuccessRate=0.00 delta 1000 -> 100