wpa_supplicant和udhcpc测试

本文讲述了在使用wpa_supplicant和udhcpc进行网络连接时,针对网卡卸载和路由器断连的两种测试情况。在网卡卸载后,wpa_supplicant会尝试重新扫描,需要手动设置默认网关才能恢复外网访问。而路由器断开再连接时,由于IP和DNS信息未变,wpa_supplicant能自动重新连接到外网。wpa_cli工具可用于检查wpa的状态。

测试1:

当把wpa_supplicant和udhcpc线程启动起来后,使用ifconfig ra0 down 让卸载掉网卡,wpa线程会打印以下的调试信息,

Failed to initiate AP scan.
ioctl[SIOCSIWSCAN]: Network is down
Failed to initiate AP scan.
ioctl[SIOCSIWSCAN]: Network is down
Failed to initiate AP scan.
ioctl[SIOCSIWSCAN]: Network is down
Failed to initiate AP scan.

然后使用ifconfig ra0 up 再次启动网卡,wpa会在此连接上,但此时的设备已经不能在此访问外网了,因为重新挂载ra0网卡后,以前udhcpc配置的IP 和 网管都失效了,因此虽然连上了wifi但不能访问外网,route add default gw 在指定下网管就可以了,(访问外网还需要依赖配置文件/etc/resolve.conf里的DNS服务器地址,但卸载网卡不会影响这个文件)



测试2:

当把wpa_supplicant和udhcpc线程启动起来后,把路由器断掉,wpa会报reason=0这样的错误重新接上路由器,又可以重新连接外网,因为只是断了路由但IP信息和网管 DNS信息都没变因此只要重新连上路由器既可以再次访问外网了


在此期间可以用wpa_cli status 来查看wpa的连接状态

没启动wpa_supplicant线程会wpa_cli会打印以下调试信息

Failed to connect to wpa_supplicant - wpa_ctrl_open: Connection refused


卸掉网卡后会打印以下信息:

wpa_state=DISCONNECTED


断掉路由后会出现以下信息:

wpa_state=SCANNING


<think>我们已知用户希望使用wpa_supplicant连接Wi-Fi网络,使用/tmp/wifi.conf作为配置文件,并通过wpa_passphrase生成凭据。目标SSID是"Xiaomi_6E76"。根据之前的问题,我们得知/tmp/wifi.conf已经存在,但可能由于挂载时序、权限等问题导致wpa_supplicant无法读取。但是这次用户明确要求使用/tmp/wifi.conf,并且要通过wpa_passphrase生成凭据,所以我们将按照这个需求进行配置。步骤概述:1.使用wpa_passphrase生成配置文件内容(避免在命令行中明文显示密码)2.将生成的配置写入/tmp/wifi.conf3.确保/tmp目录已挂载且文件权限正确4.启动wpa_supplicant具体步骤:###🔧1.使用wpa_passphrase生成配置文件`wpa_passphrase`可以将SSID密码转换为配置文件所需的加密PSK,并输出一个网络配置块。这样可以避免在配置文件中明文存储密码。命令格式:```bashwpa_passphrase<SSID>[密码]```示例(假设密码为"my_password",但不要在命令行中直接写密码,以避免密码出现在历史记录中):```bashwpa_passphrase"Xiaomi_6E76"```执行该命令后,会提示输入密码,然后输出配置块。但为了自动化,我们可以通过管道传递密码(注意:这仍然可能暴露密码,在脚本中要小心处理):```bashecho'my_password'|wpa_passphrase"Xiaomi_6E76">/tmp/wifi.conf```然而,更好的做法是使用交互式输入,或者在脚本中通过其他安全方式获取密码(如从安全存储中读取)。但用户需求没有明确说明密码来源,所以我们按照基本方法。重要:如果用户直接在终端上运行,建议使用交互式输入,避免密码留在命令历史中。但在脚本中,如果无法避免,可以在命令后添加`&&history-d$(history1)`来清除当前命令,但这并不完全可靠。###📝2.写入配置文件将上述命令的输出重定向到/tmp/wifi.conf。如果/tmp/wifi.conf已经存在,将会被覆盖。注意:我们还需要在配置文件中添加其他配置项,比如`ctrl_interface`。因此,我们可以在生成网络配置块之前先写入基本配置,然后追加网络配置块。完整示例:```bash#先写入基本配置echo'ctrl_interface=/var/run/wpa_supplicant'>/tmp/wifi.confecho'update_config=1'>>/tmp/wifi.conf#生成网络配置块并追加wpa_passphrase"Xiaomi_6E76">>/tmp/wifi.conf```执行`wpa_passphrase`时会提示输入密码,输入后生成配置块并追加。或者,非交互式(不推荐,因为密码会出现在命令中):```bashwpa_passphrase"Xiaomi_6E76""my_password">>/tmp/wifi.conf```###🔒3.设置文件权限由于/tmp目录的权限通常比较宽松,但为了安全,我们应确保配置文件不被其他用户读取(因为可能包含PSK,尽管已加密):```bashchmod600/tmp/wifi.conf```注意:如果wpa_supplicant是以root身份运行的,那么文件的所有者也应该是root,或者至少运行用户有读取权限。###🚀4.启动wpa_supplicant使用以下命令启动:```bashwpa_supplicant-iwlan0-c/tmp/wifi.conf-B```其中:-`-iwlan0`:指定无线接口-`-c/tmp/wifi.conf`:指定配置文件路径-`-B`:后台运行###🔍5.验证连接使用`wpa_cli`或`ifconfig`验证:```bashwpa_cli-iwlan0statusifconfigwlan0```如果连接成功,应该看到wlan0接口获取到了IP地址。###⚠️关于/tmp目录的说明如前所述,/tmp在系统启动时可能被挂载为tmpfs,如果wpa_supplicant在挂载前启动,则会导致找不到文件。因此,在系统启动脚本中运行上述步骤时,要确保先挂载/tmp。###🖥️完整脚本示例(交互式,在命令行中手动执行)```bash#!/bin/sh#确保/tmp已挂载(如果未挂载则挂载,但通常系统已经挂载)if!mountpoint-q/tmp;thenmount-ttmpfstmpfs/tmpfi#设置SSIDSSID="Xiaomi_6E76"#1.创建基本配置文件echo"ctrl_interface=/var/run/wpa_supplicant">/tmp/wifi.confecho"update_config=1">>/tmp/wifi.conf#2.使用wpa_passphrase添加网络配置,交互式输入密码echo"Pleaseenterthepasswordfor$SSID:"wpa_passphrase"$SSID">>/tmp/wifi.conf#3.设置文件权限chmod600/tmp/wifi.conf#4.启动wpa_supplicantwpa_supplicant-iwlan0-c/tmp/wifi.conf-B#5.获取IP地址(使用dhcp客户端)udhcpc-iwlan0#6.检查连接ifconfigwlan0```注意:如果系统中没有`udhcpc`,可以使用其他dhcp客户端,如`dhclient`。###📌通过wpa_cli验证连接状态启动wpa_supplicant后,可以通过以下命令查看状态:```bashwpa_cli-iwlan0status```输出示例:```bssid=xx:xx:xx:xx:xx:xxfreq=2437ssid=Xiaomi_6E76id=0mode=stationpairwise=CCMPgroup=CCMPkey_mgmt=WPA2-PSKwpa_state=COMPLETEDip_address=192.168.1.100...```###🔍如果连接失败,检查日志使用调试模式运行wpa_supplicant:```bashwpa_supplicant-iwlan0-c/tmp/wifi.conf-d```###总结按照上述步骤,应该能够使用/tmp/wifi.conf配置文件连接Wi-Fi网络。注意处理/tmp目录的挂载时序文件权限问题。###相关问题§§相关问题§§1.如何安全地在脚本中处理Wi-Fi密码以避免泄露?2.wpa_supplicant无法连接到隐藏SSID的网络,如何解决?3.在嵌入式Linux系统中,如何设置开机自动连接指定的Wi-Fi网络?</think> ### 逐步配置 wpa_supplicant 连接 Wi-Fi 以下是使用 `/tmp/wifi.conf` 连接 **Xiaomi_6E76** 的完整操作流程: #### 🔒 1. 生成加密凭据 (使用 wpa_passphrase) ```bash # 执行后提示输入密码(密码不回显) wpa_passphrase "Xiaomi_6E76" | tee /tmp/wifi.conf ``` 执行后输入Wi-Fi密码,得到如下配置: ```conf network={ ssid="Xiaomi_6E76" #psk="明文密码" psk=加密后的64位十六进制字符串 } ``` #### ⚙ 2. 完善配置文件 编辑 `/tmp/wifi.conf` 添加关键参数: ```bash echo -e "ctrl_interface=/var/run/wpa_supplicant\nupdate_config=1\n" | cat - /tmp/wifi.conf > /tmp/tmp.conf && mv /tmp/tmp.conf /tmp/wifi.conf ``` 最终配置文件内容: ```conf ctrl_interface=/var/run/wpa_supplicant update_config=1 network={ ssid="Xiaomi_6E76" psk=加密后的64位十六进制字符串 } ``` #### 🔑 3. 设置文件权限 ```bash chmod 600 /tmp/wifi.conf # 限制只允许root访问 ``` #### 📡 4. 启动 wpa_supplicant ```bash wpa_supplicant -B -i wlan0 -c /tmp/wifi.conf -f /var/log/wpa.log ``` 参数说明: - `-B`:后台运行 - `-i wlan0`:指定无线接口 - `-c`:配置文件路径 - `-f`:日志输出路径 #### 🌐 5. 获取IP地址 ```bash udhcpc -i wlan0 -n -q # 使用DHCP获取IP ``` #### ✅ 6. 验证连接状态 ```bash wpa_cli -i wlan0 status | grep "ssid" # 应返回 ssid=Xiaomi_6E76 ifconfig wlan0 | grep "inet addr" # 查看获取的IP地址 ``` ### 连接过程时序图 ```mermaid sequenceDiagram participant 用户 participant wpa_passphrase participant wpa_supplicant participant DHCP服务 participant 无线路由器 用户->>wpa_passphrase: 生成加密凭据 wpa_passphrase->>/tmp/wifi.conf: 写入配置 用户->>wpa_supplicant: 启动服务 wpa_supplicant->>无线路由器: 关联请求(SSID/Xiaomi_6E76) 无线路由器->>wpa_supplicant: 认证响应 wpa_supplicant->>DHCP服务: DHCP请求 DHCP服务->>wlan0: 分配IP地址 ``` ### 故障排除技巧 1. **连接失败检查**: ```bash tail -f /var/log/wpa.log # 实时查看日志 dmesg | grep wlan0 # 检查驱动错误 ``` 2. **手动扫描验证**: ```bash wpa_cli -i wlan0 scan wpa_cli -i wlan0 scan_results | grep "Xiaomi_6E76" ``` 3. **临时调试模式**: ```bash pkill wpa_supplicant wpa_supplicant -dddt -i wlan0 -c /tmp/wifi.conf ``` ### ⚠️ 重要注意事项 1. **/tmp 的易失性**: ```bash mount | grep /tmp # 应显示 tmpfs 类型 ``` 系统重启后`/tmp`内容会丢失,生产环境建议: ```bash mkdir -p /etc/wpa_supplicant cp /tmp/wifi.conf /etc/wpa_supplicant/ ``` 2. **安全强化建议**: ```bash # 禁用配置文件写权限 chattr +i /tmp/wifi.conf ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值