使用 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 网络的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spring JdbcTemplate 连接到受密码保护的 MS Access 数据库?

如何使用 web3 连接到受保护的 infura 项目?

如何使用 WildFly 连接到受 Kerberos 保护的 Apache Phoenix 数据源?

如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?

震惊!你连无线Wi-Fi都不知道?

在 Linux 上从 Python 连接到受保护的 WiFi