使用 adb shell 连接到受密码保护的 wifi 网络

Posted

技术标签:

【中文标题】使用 adb shell 连接到受密码保护的 wifi 网络【英文标题】:Connect to password protected wifi network using adb shell 【发布时间】:2014-05-14 13:29:27 【问题描述】:

我有一部 android 手机,目标是将手机连接到受密码保护的 wifi 网络。

目前我知道的步骤:

adb root
adb shell svc wifi enable

好的,亲爱的,wifi 已打开。 现在我需要将手机连接到某个需要密码的无线网络。 我希望我可以使用 adb shell 命令进行连接。

有什么帮助吗?

我宁愿不将程序下载到设备上

【问题讨论】:

如果你真的有根,你可能可以将新记录插入到它拥有的任何访问点数据库中,但这会很棘手。可以手动配置数据库,只用ADB激活吗? 没有像接入点数据库这样的东西。 Android 将其配置的 AP 列表保存在 /data/misc/wifi/wpa_supplicant.conf 文件中(对于不同的 OEM 甚至手机型号可能会有所不同)。尽管最简单的方法是通过添加新的网络块来更改此文件,但推荐的方法是使用 wpa_cli、wpa_supplicant 命令行界面。检查我的答案。 【参考方案1】:

这可以使用wpa_cliwpa_supplicant的命令行界面来实现:

# Get to the shell
adb root
adb shell

# Get to wpa_cli prompt
wpa_cli -p /data/misc/wifi/sockets/ -i wlan0

# Add new WiFi network
add_network
set_network 0 auth_alg OPEN
set_network 0 key_mgmt WPA-PSK
set_network 0 ssid "network_name"
set_network 0 proto RSN
set_network 0 mode 0
set_network 0 psk "password"

# Connect to it
select_network 0
enable_network 0
reassociate

# Check the status
status

在上面的命令列表中,add_network 命令会输出新网络的索引,用于后续命令。在这个例子中,这个索引是0

【讨论】:

感谢您的帮助。看起来你的 psk 和 ssid 方法有误。 是否需要wpa_cli 的选项?在我的手机上,我不必使用任何选项来添加网络。 您好,现在在 Android 8 中,wpa_cli 命令不存在,还有其他选择吗? @Cu635 它很有可能位于不在您的 PATH 中的目录中。我建议您在 /vendor 和其他目录中搜索 wpa_cli 二进制文件。当然,OEM 有可能从用户构建中删除了wpa_cli 二进制文件,但可能性很小。此外,wpa_supplicant 基本上没有替代品(iw 除外,但它是新的,而且我敢肯定,没有 OEM 会在2017 中使用iw 而不是wpa_supplicant 制造设备。【参考方案2】:

使用此程序 [包括更多详细信息:)]

1- 确保 wpa_supplicant 正在运行。使用以下命令查找其 pid:

pidof wpa_supplicant

这个命令应该返回 wpa_supplicant 进程的 pid。如果没有返回,wpa_supplicant 没有运行。使用 svc 命令关闭 wifi 然后再打开:

svc wifi disable
svc wifi enable

2- 从 wpa_supplicant.conf 文件中读取 控制界面 目录。该文件通常存在于 /data/misc/wifi/ 中。使用 cat 命令打开此文件:

cat /data/misc/wifi/wpa_supplicant.conf

update_config=1
ctrl_interface=/data/misc/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

注意:要查找 wpa_supplicant.conf 文件,您可以在根目录中使用 find 命令搜索。使用 cd / 命令进入根目录并使用 find 命令找到 wpa_supplicant.conf:

找到 . -name wpa_supplicant.conf

转到 ctrl_interafce 指定的控制接口目录。此目录中的第一个文件是接口名称

cd /data/misc/wpa_supplicant
ls
wlan0

您将需要“控制接口”和“接口名称”来执行 wpa_cli 命令。

注意:如果 wpa_cli 命令这两个参数输入错误,wpa_cli 无法连接到 wpa_supplicant 并返回此消息:

Interactive mode

Could not connect to wpa_supplicant: plan - re-trying

或者它可能会连接到 wpa_supplicant,但对于它的交互式命令返回 UNKNOW COMMAND,如下所示:

> scan
UNKNOWN COMMAND
>add_network
UNKNOWN COMMAND

3- 使用上述参数执行 wpa_cli 命令:

wpa_cli -p [control directory path] -i [interface name]
wpa_cli -p /data/misc/wpa_supplicant -i wlan0

然后此命令进入交互模式,您可以在其中扫描和查找网络,连接到它们并...

# Add new WiFi network
add_network
set_network 0 auth_alg OPEN
set_network 0 key_mgmt WPA-PSK
set_network 0 ssid "network_name"
set_network 0 proto RSN
set_network 0 mode 0
set_network 0 psk "password"

# Connect to it
select_network 0
enable_network 0
reassociate

# Check the status
status

save_config

使用 save_config 您可以将这些设置存储回 wpa_supplicant.conf 文件以供将来使用。 下次可以通过 enable_network 命令调用这些设置。下次要启用 wifi 时,请使用以下命令:

wpa_cli -p /data/misc/wpa_supplicant -i wlan0

enable network 0

0 是网络 ID。您可以使用 list_networks 查找其他存储的配置。 有关 wpa_cli 的更多信息,请参阅此文档: 此页面还记录了 wpa_cli 的完整交互式命令。

http://w1.fi/cgit/hostap/plain/wpa_supplicant/README

我使用此程序在 Orange Pi 2G IOT 上的 Android 上配置 wifi。

【讨论】:

以上是关于使用 adb shell 连接到受密码保护的 wifi 网络的主要内容,如果未能解决你的问题,请参考以下文章