本文最后更新于 2024年2月29日 凌晨
在一些特殊的情况下,可能需要使用 Android 手机或者 PC 的线路访问外部网络资源,同时没有条件连接 wifi 网络,这时候可以使用 Android Platform Tools 的 adb 工具来达到目的。
Android Platform Tools 的下载地址为:
https://developer.android.com/tools/releases/platform-tools#downloads
Android 手机使用 PC 的代理上网的方法
用 USB 数据线连接 Android 手机和 PC,在 PC 中执行下面的命令
1 2
| adb shell settings put global http_proxy 127.0.0.1:7890 adb reverse tcp:7890 tcp:7890
|
首先设置 Android 手机 http 全局代理为 127.0.0.1:7890,然后将手机的 127.0.0.1:7890 转发到 PC 127.0.0.1:7890 (没有找到设置 Android 系统全局使用 socks5 代理的方法)
设置 Android 全局代理需要 android.permission.WRITE_SECURE_SETTINGS 权限,ColorOS 需要在开发者选项中开启 「禁止权限监控」具体方法可以参考:在 ColorOS 上免 root 玩机,请先打开这个开关,如果是小米手机可能需要在开发者选项中打开 「USB调试(安全设置)」,我没有小米手机未测试。
如果需要恢复Android 无代理状态,需要使用下面的命令,一定要记得执行这条恢复命令,否则手机可能无法联网。
1 2 3
| adb shell settings delete global http_proxy adb shell settings delete global global_http_proxy_host adb shell settings delete global global_http_proxy_port
|
执行 adb reverse
命令后,可以使用 adb reverse --list
查看连接建立情况:
1
| UsbFfs tcp:7890 tcp:7890
|
不需要使用时,可以使用 adb reverse --remove
移除转发
参考 adb 的帮助,执行命令 adb help
1 2 3 4 5 6 7 8 9
| reverse --list list all reverse socket connections from device reverse [--no-rebind] REMOTE LOCAL reverse socket connection using: tcp:<port> (<remote> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> reverse --remove REMOTE remove specific reverse socket connection reverse --remove-all remove all reverse socket connections from device
|
PC 使用 Android 手机代理上网的方法
首先在手机上开启 socks5 代理 127.0.0.1:9999, 然后用 USB 数据线连接 Android 手机和 PC,在 PC 中执行下面的命令
1
| adb forward tcp:7890 tcp:9999
|
这样会把 PC 127.0.0.1:7890 转发到手机 127.0.0.1:9999
使用 adb forward --list
查看连接建立情况
1
| 94e22910 tcp:7890 tcp:9999
|
不需要使用时,可以使用 adb forward --remove
移除转发
1
| adb forward --remove tcp:7890
|
参考 adb 的帮助,执行命令 adb help
1 2 3 4 5 6 7 8 9 10 11 12 13
| forward --list list all forward socket connections forward [--no-rebind] LOCAL REMOTE forward socket connection using: tcp:<port> (<local> may be "tcp:0" to pick any open port) localabstract:<unix domain socket name> localreserved:<unix domain socket name> localfilesystem:<unix domain socket name> dev:<character device name> jdwp:<process pid> (remote only) vsock:<CID>:<port> (remote only) acceptfd:<fd> (listen only) forward --remove LOCAL remove specific forward socket connection forward --remove-all remove all forward socket connections
|
参考资料
[1] 在 ColorOS 上免 root 玩机,请先打开这个开关 - 克莱德 2021.06.08
https://sspai.com/post/67110
[2] 在 Android 手机上的使用 stunnel - zz 2021.2.24
https://www.usmacd.com/cn/android_stunnel/