【问题标题】:Run tor.so from android app "net::ERR_NAME_NOT_RESOLVED"从 android 应用程序“net::ERR_NAME_NOT_RESOLVED”运行 tor.so
【发布时间】: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


    【解决方案1】:

    要在尝试解析 Onion 域时修复 net::ERR_NAME_NOT_RESOLVED 错误,代理需要通过 Tor 进行 DNS 解析,而不是使用本地 DNS 解析器。

    要通过 Tor 获得 DNS 解析,请更改:

    var agent = new SocksProxyAgent("socks://localhost:9250");
    

    到:

    var agent = new SocksProxyAgent("socks5h://localhost:9250");
    

    SocksProxyAgentinstantiated with socks:// 时,DNS 解析由本地解析器执行。使用 socks5h:// 告诉代理也通过代理发送 DNS 请求,这正是解析洋葱域所需要的。

    这还可以防止通过 Tor 发送请求但不通过 Tor 发送 DNS 请求的 DNS 泄漏。

    【讨论】:

    • 不,问题仍然存在。没有任何改变。我的设置还有什么问题?我怎么能确定是什么原因造成的?安卓?如何确保tor在后台正常运行?
    • ERR_NAME_NOT_RESOLVED with Tor + Onion 是一个非常明确的指标,表明它无法通过 Tor 解析。从 socks-proxy-agent 代码的外观来看,socks5h 应该导致名称解析通过 Tor。您能否嗅探 DNS 流量以确认 DNS 请求正在泄漏到本地解析器而不是 Tor?
    • 抱歉,不知道该怎么做。还有其他选择吗?
    • 什么图书馆在做什么io.connect(url, { agent: agent })?那是socket.io吗?如果您按照npmjs.com/package/socks-proxy-agent 中的 HTTP 示例(仅用于测试)是否正确获取 .onion 地址?
    • 另外sockssocks5h 在这个库中应该是等价的,所以我的前提一开始是不正确的。也许 HTTP 库不理解 SocksProxyAgent 和 AgentOptions?
    猜你喜欢
    • 2011-08-10
    • 2011-02-13
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多