簡體   English   中英

使用 adb shell 連接到 WiFi

[英]Connecting to WiFi using adb shell

我擁有連接到特定接入點的所有詳細信息。 我只需要使用那個接入點,所以我需要的只是執行它的命令。

您可以自己(或在您的腳本中)將網絡條目添加到 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)"

聚會遲到了,但我想出了一種在沒有 root的設備上完成此任務的方法。

它可能不漂亮,但它有效。

基本上我的建議是創建一個應用程序,該應用程序根據啟動應用程序時給出的EXTRAS加入接入點。 然后使用am命令的-e <KEY> <VALUE>參數提供EXTRAS

我已經構建了一個應用程序,它可以在這里找到: https : //github.com/steinwurf/adb-join-wifi

安裝應用程序后,可以使用以下ADB命令加入 wifi 接入點:

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 中有更多信息。

希望它可以幫助某人。

作為附加組件:您可以在設備上以 root 身份通過svc啟用 wifi

svc wifi enable

並禁用通過

svc wifi disable

作為另一個附加組件:雖然我的設備已植根,但我在嘗試執行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'"

我通過這個解決問題: 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原始文件,添加push到/data/misc/wifi文件夾,重啟你的設備。請注意,不同的設備在網絡線以上的內容是不同的,不要修改那部分。

太晚了,但我希望這會幫助任何可能偶然發現此線程的人。

如果您正在嘗試 adb pull 方法但收到“遠程對象不存在”,請嘗試以下操作:

在同一個命令提示符框中,

  • 輸入adb rootadb root身份重新啟動 adb。 點擊進入。
  • 現在輸入adb shell ,點擊回車。 確保提示顯示root@[device]:
  • 在 # 提示符下輸入cd /data/misc/wifi點擊回車。
  • 最后輸入cat wpa_supplicant.conf點擊回車。

這應該將您之前在手機上連接的 WiFi 數據轉儲到您的電腦屏幕。

在遇到“遠程對象不存在”問題后,這些命令在我的無根設備上運行。

您可以使用帶有這些參數的命令 adb shell cmd -w wifi connect-network

-  connect-network  open|owe|wpa2|wpa3 [] [-m] [-d] [-b ] [-r auto|none|persistent|non_persistent]
    Connect to a network with provided params and add to saved networks list
    open|owe|wpa2|wpa3 - Security type of the network.
     - SSID of the network
        - Use 'open' or 'owe' for networks with no passphrase
           - 'open' - Open networks (Most prevalent)
           - 'owe' - Enhanced open networks
        - Use 'wpa2' or 'wpa3' for networks with passphrase
           - 'wpa2' - WPA-2 PSK networks (Most prevalent)
    -m - Mark the network metered.
           - 'wpa3' - WPA-3 PSK networks
    -d - Mark the network autojoin disabled.
    -h - Mark the network hidden.
    -p - Mark the network private (not shared).
    -b  - Set specific BSSID.
    -r auto|none|persistent|non_persistent - MAC randomization scheme for the network

要使用 wpa2 身份驗證和密碼短語“qwertyuiop”連接到 wifi 網絡“Home”,請使用

adb shell cmd -w wifi connect-network Home wpa2 qwertyuiop

要連接到開放的 wifi 網絡“公共”,請使用

adb shell cmd -w wifi connect-network Public open

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM