【发布时间】:2021-12-17 19:35:15
【问题描述】:
我正在使用 API 29 Android 模拟器编写一个电容器应用程序进行测试。我正在使用来自https://www.npmjs.com/package/@start9labs/capacitor-tor 的插件电容器-tor
我已经修改了插件,使其现在从 jnilibs 文件夹执行 tor,因为它是 Api 级别 29+ 所必需的,并且它似乎运行正常,如日志所示:
D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 7 8
I/ConnectionChangeReceiver: Switching to ONLINE mode
D/eglCodecCommon: setVertexArrayObject: set vao to 1 (1) 7 4
D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 7 8
D/eglCodecCommon: setVertexArrayObject: set vao to 1 (1) 7 4
D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 7 8
I/t*.p*.OnionProxyManager: Enabling network: true
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 10% (conn_done): Connected to a relay
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
D/eglCodecCommon: setVertexArrayObject: set vao to 1 (1) 7 4
D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 7 8
D/eglCodecCommon: setVertexArrayObject: set vao to 1 (1) 7 4
D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 7 8
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 14% (handshake): Handshaking with a relay
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 15% (handshake_done): Handshake with a relay done
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 75% (enough_dirinfo): Loaded enough directory info to build circuits
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
I/*oxyManagerEventHandler: OR connection: status: CONNECTED, orName: $8ACD73BD9BDD5E5AFC97169C5837C5E0F732A2CF~SkynetW
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 90% (ap_handshake_done): Handshake finished with a relay to build circuits
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 95% (circuit_create): Establishing a Tor circuit
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
I/*oxyManagerEventHandler: OR connection: status: CONNECTED, orName: $6429B0D703EB90A18528F9F8B843504AA27765C6~rinderwahnRelay37L
I/*oxyManagerEventHandler: message: severity: NOTICE, msg: Bootstrapped 100% (done): Done
V/Capacitor/TorPlugin: Notifying listeners for event torInitProgress
D/Capacitor/TorPlugin: No listeners found for event torInitProgress
D/TorPlugin: Finishing off tor. Started successfully: true
作为 30 秒后的测试,我再次尝试启动 tor,它已经按预期运行:
V/Capacitor/Plugin: To native (Capacitor plugin): callbackId: 51286662, pluginId: TorPlugin, methodName: start
V/Capacitor: callback: 51286662, pluginId: TorPlugin, methodName: start, methodData: {"socksPort":9250,"controlPort":9251,"initTimeout":15000}
D/TorPlugin: Kicking off tor
I/t*.p*.OnionProxyManager: Tor is already running
I/ConnectionChangeReceiver: Switching to ONLINE mode
I/t*.p*.OnionProxyManager: Enabling network: true
D/TorPlugin: Finishing off tor. Started successfully: true
I/t*.p*.OnionProxyManager: Enabling network: true
所以看起来 tor 确实运行正常。 尽管我得到的一切仍然是 net::ERR_NAME_NOT_RESOLVED,因为我的请求是由 javascript 部分中的 socket.io 和 socks-proxy-agent 的浏览器版本提出的:
var agent = new SocksProxyAgent("socks://localhost:9250");
var socket = await io.connect(onion_v3_address.onion:3000, { agent: agent });
socket.on('connect', async socket => {
console.log("connected to server");
// either with send()
socket.send('hello');
});
chrome 调试器中的错误:
GET http://onion_v3_address.onion:3000/socket.io/?EIO=4&transport=polling&t=NpbeiTH net::ERR_NAME_NOT_RESOLVED
(当然真实地址换成了onion_v3_address.onion:3000)
插件是这样启动的:
Capacitor.Plugins.TorPlugin.start({socksPort: 9250, controlPort: 9251, initTimeout: 15000});
怎么了? tor 在本地主机上不可用吗?我需要使用与 localhost 不同的 ip 吗? android是否以某种方式阻止了我的请求? 还有什么可能导致这个问题?
onion_v3_address.onion:3000 的 tor 服务器在 linux 或 windows 测试时当然可以访问并按预期工作。
如果不使用类似的代理:
socket = await io.connect('127.0.0.1:9250', {resource: '/onion_v3_address.onion:3000'});
我进入 chrome 调试器:
Failed to load resource: the server responded with a status of 501 (Tor is not an HTTP Proxy)
(index):1 Access to XMLHttpRequest at 'http://127.0.0.1:9250/socket.io/?EIO=4&transport=polling&t=NpcLcw9' from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
所以看来 tor 确实运行正常,我只是不知道如何正确地从 webview 请求 totor ???!再次:使用代理的 javascript 代码在电子(linux、macOS、win)100% 上工作。它使用 orbot 与科尔多瓦一起工作。但是我不想用orbot。
在 logcat 中我发现了这个:
2021-11-07 09:16:29.800 20411-20411/? W/libtor.so: type=1400 audit(0.0:1271): avc: denied { ioctl } for path="socket:[443934]" dev="sockfs" ino=443934 ioctlcmd=0x894b scontext=u:r:untrusted_app:s0:c162,c256,c512,c768 tcontext=u:r:untrusted_app:s0:c162,c256,c512,c768 tclass=tcp_socket permissive=0 app=com.github.anonym.myapp
这可能是原因还是与套接字无关?
在 Chrome 中输入 localhost:9250 时,它会在模拟器和手机中显示“这是一个袜子代理...”。所以这意味着 tor 实际上是全局可用的。
【问题讨论】:
标签: javascript java android capacitor tor