按应用代理
让手机上选定的应用通过上游 SOCKS5 或 HTTP 代理联网,不需要 root,检查它们对外显示的地址,并让凭据不出现在脚本中。
本页为译文。如与英文版不一致,以英文版为准。 English
proxy 让你选定的应用通过你指定的代理服务器联网,而手机上的其他部分,以及 Droidline 自身与电脑的连接,继续使用正常网络。典型的用法是让一整架手机中的每一部,在某个应用上各自使用不同的出口地址。
开始之前
- Android 10 或更高版本。
- VPN 权限,在应用的设置标签页中允许一次即可。在此之前,
proxy会以NO_PERMISSION失败。 - 手机上没有其他正在运行的 VPN 应用。Android 同一时间只运行一个 VPN,所以 Tailscale、WireGuard 等应用无法与它同时运行。
- 一个你有权使用的上游代理:
socks5://或http://,带不带用户名和密码都可以。
开启、检查、关闭
d.proxy("socks5://user:pass@203.0.113.10:1080", app="com.android.chrome")
print(d.proxy_check("com.android.chrome"))
# {'active': True, 'ip': '203.0.113.10', 'upstream': 'socks5://203.0.113.10:1080', 'error': ''}
d.proxy("off")await d.proxy("socks5://user:pass@203.0.113.10:1080", { app: "com.android.chrome" });
console.log(await d.proxyCheck("com.android.chrome"));
// { active: true, ip: '203.0.113.10', upstream: 'socks5://203.0.113.10:1080', error: '' }
await d.proxy("off");droidline proxy socks5://user:pass@203.0.113.10:1080 --app com.android.chrome
droidline proxy_check com.android.chrome
droidline proxy offapp 接受一个包名或一个列表。proxy_check 从手机经由上游发出一个请求,报告外界看到的该应用的地址。
不要把密码写进脚本
在电脑上用一个简短的名称保存代理,只需一次。密码存放在服务器的机密存储中(Windows 上使用 DPAPI),不会写入 config.toml 或你的代码:
droidline proxy add kr1 socks5://user:pass@203.0.113.10:1080
droidline proxy list
然后用 @ 加名称引用它:
d.proxy("@kr1", app=["com.android.chrome", "com.example.app"])await d.proxy("@kr1", { app: ["com.android.chrome", "com.example.app"] });droidline proxy @kr1 --app com.android.chrome,com.example.app工作原理
应用会启动一个只作用于所选应用的 VPN,并把这些应用的代理设为 Droidline 应用内的一个小型代理服务器。这个本地代理把每个连接转发到你的上游:
http://host:port,可附带user:pass,使用 HTTP CONNECT。socks5://host:port,可附带user:pass。主机名由代理解析,而不是由手机解析。
所选应用的其他所有流量都会被丢弃,不会绕过代理泄漏出去。因此,忽略系统代理设置的应用会失去网络连接,而不是直接联网。Chrome 以及大多数基于 WebView 或 OkHttp 的应用都遵循这项设置。
失败时
proxy 以 PROXY_FAILED 失败,并附带一个 reason:
| 原因 | 通常表示 |
|---|---|
auth | 用户名或密码错误 |
timeout | 代理没有响应;检查地址,并确认手机能访问到它 |
refused | 该端口上没有程序在监听 |
protocol | URL 写的是 socks5,但服务器使用的是 HTTP,或者反过来 |
proxy_check 会在 error 字段中报告同样的问题,但不会失败。
限制
- 每部手机同一时间只能有一个上游。用不同的 URL 再次调用
proxy会替换它。 - 代理开启期间,应用内的本地代理监听手机的回环地址。同一部手机上的其他应用如果尝试,也能使用它;在你自己控制的手机上,只有安装了不信任的应用时,这一点才有影响。
- 使用你有权使用的代理,并只用于允许这样做的服务。参见使用条款。