2012-01-03 112 views
19

我拥有所有连接到特定接入点的详细信息。我只能使用该接入点,所以我需要的只是执行该命令的命令。使用adb外壳连接到wi-fi

+0

你想实现什么? – 2012-01-03 07:03:11

+1

我必须自动化一些只能使用wi-fi的东西。我可以使用猴子并点击设置 - >等,但最后一件事是我如何选择网络ABC,因为可能有多个网络可用。所以如果我能得到一个命令,我可以做到这一点使用SSID和密码:) – Rohan 2012-01-03 07:05:48

+0

为了补充答案: http://stackoverflow.com/questions/10282484/android-adb-turn-on-wifi- via-adb – EthraZa 2013-03-15 20:12:29

回答

23

您可以添加网络进入的wpa_supplicant.conf自己(或你的脚本中)本质上手动连接一次,然后执行:

adb pull /data/misc/wifi/wpa_supplicant.conf 

和整合网络进入你的脚本的自动化。实施例简单的脚本:

#!/bin/bash 
# 

# Get this information by connecting manually once, and do 
# adb pull /data/misc/wifi/wpa_supplicant.conf 
ADB_PULL="adb pull /data/misc/wifi/wpa_supplicant.conf" 
WIRELESS_CTRL_INTERFACE=wlan0 
WIRELESS_SSID=Gondolin 
WIRELESS_KEY_MGMT="WPA-EAP IEEE8021X" 
WIRELESS_EAP=PEAP 
WIRELESS_USER=Turgon 
WIRELESS_PASSWORD=IdrilCelebrindal 

adb start-server 
adb wait-for-device 
echo "adb connection....[CONNECTED]" 
adb root 
adb wait-for-device 
adb remount 
adb wait-for-device 

pushd /tmp 
rm wpa_supplicant.conf 2>/dev/null # Remove any old one 
adbpull_status=`$ADB_PULL 2>&1` 
echo -e "\nAttempting: $ADB_PULL" 
if [ `echo $adbpull_status | grep -wc "does not exist"` -gt 0 ]; then 
    echo " wpa_supplicant.conf does not exist yet on your device yet." 
    echo "This means you have not used your wireless yet." 
    echo "" 
    echo "Taking our best shot at creating this file with default config.." 

    echo "ctrl_interface=$WIRELESS_CTRL_INTERFACE" >> wpa_supplicant.conf 
    echo "update_config=1" >> wpa_supplicant.conf 
    echo "device_type=0-00000000-0" >> wpa_supplicant.conf 
else 
    echo $adbpull_status 
    echo " wpa_supplicant.conf exists!" 
fi 

echo "" 
echo "Add network entry for wpa_supplicant.conf.." 
echo "" >> wpa_supplicant.conf 
echo "network={" >> wpa_supplicant.conf 
echo " ssid=\"$WIRELESS_SSID\"" >> wpa_supplicant.conf 
echo " key_mgmt=$WIRELESS_KEY_MGMT" >> wpa_supplicant.conf 
echo " eap=$WIRELESS_EAP" >> wpa_supplicant.conf 
echo " identity=\"$WIRELESS_USER\"" >> wpa_supplicant.conf 
echo " password=\"$WIRELESS_PASSWORD\"" >> wpa_supplicant.conf 
echo " priority=1" >> wpa_supplicant.conf 
echo "}" >> wpa_supplicant.conf 
echo "Pushing wpa_supplicant.conf.." 
adb push wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf 
popd #/tmp 

adb shell chown system.wifi /data/misc/wifi/wpa_supplicant.conf 
adb shell chmod 660 /data/misc/wifi/wpa_supplicant.conf 

echo "" 
echo "Finished!" 
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings 
echo "Please toggle wifi off/on now.. (ifconfig not sufficient, monkey this)" 
+2

可以使用:在Ubuntu盒子上使用'wpa_passphrase ssid passphrase'并复制输出到android设备。它在三星平板电脑上为我工作。 – wojciii 2012-08-11 11:22:01

+3

这只适用于有根设备。 – vent 2012-10-08 21:19:23

+4

是,对于有根设备。但它确实帮助我解锁我的设备。非常感谢您提供有用的路径。而不是切换设置我使用'svc wifi禁用'然后'svc wifi enable'。 – ony 2014-08-12 13:40:00

6

作为一个附加的: 可以将设备

svc wifi enable 

上使能经由svc的WiFi如根和经由

svc wifi disable 
+0

这需要设备被植入,并且由于安全原因,我们不应该建议用户对设备进行根目录。 – CodeFlash 2017-08-02 08:09:15

+0

@ RajA.P .:感谢您的反馈。看似除[@jpihl](https://stackoverflow.com/a/37303412/1587329)之外的所有方法都需要设备根植,他们只是没有明确地说明这一点。如果downvote是从你那里得到的:你是否全部倒下了它们? – 2017-08-02 09:47:00

+0

我曾尝试上述命令说我的设备是根植,我使用我的企业设备,我不想妥协。 – CodeFlash 2017-08-02 10:30:03

2

禁用作为另一个附加-on:虽然我的设备已经扎根,但在尝试执行adb pull时,出现了 remote object ''/data/misc/wifi/wpa_supplicant.conf'' does not exist错误。发生这种情况是因为adb本身不能以ROOT模式运行。若要此你身边可以这样

adb shell "su -c 'cp -R /data/misc/wifi/wpa_supplicant.conf /data/misc/wpa_supplicant.conf'" 
adb shell "su -c 'chmod -R 777 /data/misc/wpa_supplicant.conf'" 
adb pull /data/misc/wpa_supplicant.conf 
adb shell "su -c 'rm /data/misc/wpa_supplicant.conf'" 
12

迟到了执行的东西,但我想出了一个办法做到这一点的设备上没有根

它可能不漂亮,但它的工作原理。

基本上我建议创建一个应用程序,该应用程序基于启动应用程序时给出的EXTRAS加入接入点。 然后使用am命令的-e <KEY> <VALUE>参数提供EXTRAS

我已经建立一个应用程序,它这样做,它是可以在这里找到:https://github.com/steinwurf/adb-join-wifi

一旦安装了该应用,WiFi接入点可以使用以下ADB命令加入:

adb shell am start -n com.steinwurf.adbjoinwifi/com.steinwurf.adbjoinwifi.MainActivity -e ssid [SSID] -e password_type [PASSWORD_TYPE] -e password [WIFI PASSWORD] 

还有更多Github上的README信息。

希望它可以帮助别人。

+0

谢谢你 - 好主意! – 2017-04-18 21:43:01

1

我用这个解决的问题: adb pull /data/misc/wifi/wpa_supplicant.conf ~/Desktop,然后编辑这个文件,添加网络模块,我的整个的conf文件是:

##### wpa_supplicant configuration file template ##### 
update_config=1 
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi 
eapol_version=1 
ap_scan=1 
fast_reauth=1 
network={ 
    ssid="your ssid" 
    psk="your pswd" 
    key_mgmt=WPA-PSK 
    priority=241 
} 

然后RM原始文件,添加它推到/data/misc/wifi文件夹,请重新启动您的设备。请注意,不同的设备在网络线上方有不同的内容,请勿修改该部分。

+0

这只适用于有根设备 – user2340356 2017-08-19 17:25:22

2

超晚,但我希望这可以帮助任何人可能偶然发现此线程。

如果你想在亚行拉法却收到“远程对象不存在”,试试这个:

在同一个命令提示框

  • adb root重新启动亚行根。点击进入。
  • 现在键入adb shell,点击输入。确保提示显示[email protected][device]:
  • 在#提示符下输入cd /data/misc/wifi点击输入。
  • 最后输入cat wpa_supplicant.conf点击输入。

这应该转储你以前连接到你的手机的WiFi数据到你的电脑屏幕上。

在运行到“远程对象不存在”问题后,这些命令对我的无根设备起作用。

+0

C:\ Program Files(x86)\ Minimal ADB和Fastboot> adb shell .......................... .............................. shell @ android:/ $ cd/data/misc/wifi ...... ....................................... ......... ........... .................... ........... /system/bin/sh:cd:/ data/misc/wifi:权限被拒绝................................... ................... ............. 2 | shell @ android:/ $ cat wpa_supplicant.conf ..................................... .... .................... .................. – user2340356 2017-08-19 19:50:58

+0

/system/bin/sh:cat:wpa_supplicant.conf:没有这样的文件或目录................................... .............. 1 | shell @ android:/ $ cd/data/misc/wifi .................... ......................... ....................... ......................... /system/bin/sh:cd:/ data/misc/wifi:Permission denied ...... ................................................ ......... – user2340356 2017-08-19 19:52:07

+0

这就是当我运行这些命令:(我有一个三星galaxy相机。android版本4.1.2。也许有一个安全bug,我可以使用它并检索wifi密码? – user2340356 2017-08-19 19:52:38