Wifi
Linux 和 Android 之間的 wpa_supplicant wifi-direct 連接
我正在嘗試在 Android 和 Linux 之間建立 wifi 直接連接。我正在使用 rtl8188au。
我通過使用 wpa_supplicant 找到了一些關於 wifi direct 的提示,所以我得到了 wpa_supplicant v2.0。這就是我為 wifi-direct 所做的。
1.Compiled rtl8288au driver, activated nl80211. 2.Compiled wpa_supplicant and wpa_cli for nl80211. 3.Run wpa_supplicant on linux, with option -Dnl80211. success. 4.Set ip address for wlan0. 5.Run wpa_cli, and try to connect to android device.
連接可以立即成功,但很快就會斷開連接。
這是 wpa_cli 日誌。
wpa_cli -p /var/run/wpa_supplicant
> p2p_find OK <3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8 pri_dev_type=10-0050F204-5 name='[Phone] Kulong' config_methods=0x188 dev_capab=0x25 group_capab=0x0 > > > p2p_connect e6:fa:ed:8a:5e:e8 pbc OK <3>P2P-FIND-STOPPED <3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8 pri_dev_type=10-0050F204-5 name='[Phone] Kulong' config_methods=0x80 dev_capab=0x25 group_capab=0x8 <3>P2P-GO-NEG-SUCCESS <3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID= <3>CTRL-EVENT-CONNECTED - Connection to 38:1d:d9:d4:db:70 completed (auth) [id=0 id_str=] <3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=38:1d:d9:d4:db:70 SSID=DIRECT-4J <3>CTRL-EVENT-EAP-STARTED e6:fa:ed:8a:de:e8 <3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1 <3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=14122 method=254 <3>WPS-REG-SUCCESS e6:fa:ed:8a:de:e8 2d96823c-8a30-5dd0-a267-e3adae8b1564 <3>P2P-GROUP-FORMATION-SUCCESS <3>P2P-GROUP-STARTED wlan0 GO ssid="DIRECT-4J" freq=2412 passphrase="xZbKV6sF" go_dev_addr=38:1d:d9:d4:db:70 <3>WPS-SUCCESS <3>CTRL-EVENT-EAP-FAILURE e6:fa:ed:8a:de:e8 <3>AP-STA-CONNECTED e6:fa:ed:8a:de:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8 <3>AP-STA-DISCONNECTED e6:fa:ed:8a:de:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8 <3>P2P-DEVICE-LOST p2p_dev_addr=e6:fa:ed:8a:5e:e8
有什麼不對的嗎?
如果是這樣,我應該怎麼做才能完成 wifi-direct 連接?
它不僅需要 wpa_supplicant,還需要 iwpriv、hostapd、dhcpd。
這是我為 wifi-direct 連接所做的。
設備模式(Linux 請求連接到 Android)
ifconfig wlan0 192.168.1.15 up iwpriv wlan0 p2p_set enable=0 iwpriv wlan0 p2p_get status iwpriv wlan0 p2p_get role iwpriv wlan0 p2p_set enable=1 iwpriv wlan0 p2p_set intent=1 iwpriv wlan0 p2p_get status iwpriv wlan0 p2p_set op_ch=6 iwpriv wlan0 p2p_set ssid=DIRECT-RT iwpriv wlan0 p2p_set setDN="RTL8192CU" iwlist wlan0 scan iwpriv wlan0 p2p_get2 wpsCM=<MAC_ADDRESS_OF_TARGET_DEVICE> iwpriv wlan0 p2p_get2 devN=<MAC_ADDRESS_OF_TARGET_DEVICE> iwpriv wlan0 p2p_set prov_disc=<MAC_ADDRESS_OF_TARGET_DEVICE> iwpriv wlan0 p2p_set got_wpsinfo=3 iwpriv wlan0 p2p_set nego=<MAC_ADDRESS_OF_TARGET_DEVICE> wpa_supplicant -i wlan0 -c ./wpa_0_8.conf -B wpa_cli wps_pbc <MAC_ADDRESS_OF_TARGET_DEVICE>
GO 模式(Android 請求連接到 Linux)
iwpriv wlan0 p2p_set enable=3 iwpriv wlan0 p2p_get status iwpriv wlan0 p2p_get role iwpriv wlan0 p2p_set intent=1 iwpriv wlan0 p2p_set op_ch=6 iwpriv wlan0 p2p_set ssid=DIRECT-RT ./hostapd -B ./p2p_hostapd.conf <<<<< Request connection from Android >>>> iwpriv wlan0 p2p_get peer_deva iwpriv wlan0 p2p_get req_cm iwpriv wlan0 p2p_set got_wpsinfo=3 iwpriv wlan0 p2p_get peer_ifa ./hostapd_cli wps_pbc any ifconfig wlan0 192.168.1.254 dhcpd
但是wifi直接連接有一些必要條件。
- 您的無線驅動程序應該支持 nl80211。
- 在 MAKE wpa_supplicant、hostapd 時配置“nl80211”選項。
- dhcpd 配置文件。(dhcpd.conf, dhcpd.lease)
- wpa_supplicant,hostapd 配置(conf 文件)
我希望這篇文章對想要在 Linux 和 Android 之間進行 wifi-direct 的人有用。