通过 USB 使用 adb 转发调用 Android 手机的代理
理解从笔记本电脑经 adb 转发连接到手机上的 HTTP 代理,包括回环地址、蜂窝出口以及单独的 SSH SOCKS 方案。
如果一台已获授权的 Android 设备已经在 8080 端口运行可通过 adb 访问的 HTTP 代理,就把笔记本电脑上的一个端口转发到它:
adb -s DEVICE_SERIAL forward tcp:6400 tcp:8080
使用设备的真实序列号,然后把笔记本浏览器的 HTTP 代理设为 127.0.0.1:6400。第一个端口是笔记本侧的端点,第二个是手机上的服务。adb 提供的是 TCP 通路,而不是代理协议。
laptop browser
-> laptop 127.0.0.1:6400
-> adb USB forwarding
-> phone TCP port 8080
-> phone's outbound network
手机上的代理必须支持所请求的操作,包括浏览器 HTTPS 所需的 CONNECT。仅在已获授权的设备并配合可信计算机时使用 USB 调试。这条路径不要求运营商允许外部主动向手机发起连接。
单独核验出口,不要与 USB 可达性混为一谈。除非其应用绑定其他网络,代理使用的就是手机选定的出口网络。处于活动状态的 Wi-Fi、VPN 或应用的显式路由都可能让出口与移动数据不同。
如果手机改为运行 SSH 服务器,就转发该端口并在笔记本上建立 SOCKS:
adb -s DEVICE_SERIAL forward tcp:2222 tcp:2222
ssh -N -D 127.0.0.1:8899 -p 2222 [email protected]
这里浏览器使用 127.0.0.1:8899 上的 SOCKS,由 SSH 在手机上打开目标连接。这是直接转发 HTTP 代理之外的另一种做法;两种布置都不需要公网监听。
结束后删除对应的 adb 条目,例如 adb -s DEVICE_SERIAL forward --remove tcp:6400。关闭浏览器并不会移除转发状态。