如何在Linux中无需passphase连接WIFI AP(hostapd)?

如何在Linux中无需passphase连接WIFI AP(hostapd)?

我正在嵌入式Linux系统(kernel-5.14)上工作,我正在尝试使用hostapd(并使用softAP模式)将设备配置为WIFI AP。

hostapd.conf主要修改如下,支持AP通过passphase连接,

interface=uap0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP TKIP
wpa_pairwise=TKIP CCMP
auth-algs=3

我相应地配置了 udhcpd.conf 。和
之后,我可以看到要保存的日志。hostapd -B /etc/hostapd.confudhcpd -c /etc/udhcpd.conf &AP ENABLED

进入passphase后,我可以从我的手机连接这个AP,并且我可以从AP ping我手机的IP(从AP设备上的udhcpd获得)。

现在,我想在不输入密码的情况下从手机连接 AP。我尝试更改hostapd.conf,如下所示,

wpa=0
auth_algs=1
#wpa_passphrase=12345678

然后我重新启动hostapd和udhcpd并从手机连接AP。
这次,udhcpdAP中报告日志如下,

Sending IP 192.168.1.33
Sending IP 192.168.1.33
Sending IP 192.168.1.33
Sending IP 192.168.1.33

我的手机显示了getting IP Address一段时间,然后无法连接到AP。

所以我不确定是否可以hostapd在没有 passphase 的情况下连接到 AP ( ),如果可以,如何配置hostapd.conf才能做到这一点?

答案1

您看到udhcpd对请求的响应表明手机已成功连接到 AP 的无线网络:除非已连接 WiFi 网络,否则不可能通过 WiFi 发出 DHCP 请求。

但手机也可能会通过尝试某种互联网连接来检查其接收到的 IP 地址是否确实有效。如果您尚未启用 IP 路由,则电话可能会拒绝从您收到的 IP 地址udhcpd并重试,因为它发现它实际上无法使用该 IP 与某些互联网服务进行通信。

答案2

我找到了让它发挥作用的方法。
在我的系统中,有一个WLAN0接口,我想在WLAN0上创建一个softAP作为uap0,并使用uap0作为手机连接的AP。

为了使其工作,首先需要进行/etc/hostapd.conf以下配置。

interface=uap0
driver=nl80211
auth_algs=1
hw_mode=g
#wpa=2
#wpa_passphrase=abcdef123

在该嵌入式系统中启动 AP 服务的必要步骤是:

ifconfig wlan0 up
iw dev wlan0 interface add uap0 type __ap
ifconfig uap0 192.168.0.1
hostapd -B /etc/hostapd.conf
touch /var/lib/misc/udhcpd.leases
udhcpd -f /etc/udhcpd.conf &

然后,在手机中搜索AP并连接,这时候就不需要输入密码了。
显示udhcpd以下日志。

udhcpd: sending ACK to 192.168.0.20
udhcpd: sending ACK to 192.168.0.20
udhcpd: sending ACK to 192.168.0.20
udhcpd: sending ACK to 192.168.0.20

我可以ping手机的IP(192.168.0.20),并得到。

PING 192.168.0.20 (192.168.0.20): 56 data bytes
64 bytes from 192.168.0.20: seq=6 ttl=64 time=3.944 ms
64 bytes from 192.168.0.20: seq=7 ttl=64 time=6.440 ms
64 bytes from 192.168.0.20: seq=8 ttl=64 time=2.547 ms
.....

按照上述配置和步骤直接使用 WLAN0 进行测试,得到了相同的结果。

相关内容