gpt4 book ai didi

java - 使用 Meek Transport

转载 作者:搜寻专家 更新时间:2023-11-01 09:25:31 26 4
gpt4 key购买 nike

我正在尝试将 Meek 集成到 Android 应用程序中。这里有一个示例展示了如何实例化传输:

https://github.com/guardianproject/AndroidPluggableTransports/blob/master/sample/src/main/java/info/pluggeabletransports/sample/SampleClientActivity.java

问题是我可以从那里做什么。假设我有一个使用 OkHttp3 的应用程序。有没有一种方法可以协调两者并使用 OkHttp3 作为底层传输机制,而应用程序只与 Okhttp3 交互?

我对如何实例化传输以及每个选项的含义也很矛盾。在上面提供的链接中,传输实例化如下:

private void initMeekTransport() {
new MeekTransport().register();

Properties options = new Properties();
String remoteAddress = "185.152.65.180:9001";// a public Tor guard to test

options.put(MeekTransport.OPTION_URL,"https://meek.azureedge.net/"); //the public Tor Meek endpoint
options.put(MeekTransport.OPTION_FRONT, "ajax.aspnetcdn.com"); //the domain fronting address to use
options.put(MeekTransport.OPTION_KEY, "97700DFE9F483596DDA6264C4D7DF7641E1E39CE"); //the key that is needed for this endpoint

init(DispatchConstants.PT_TRANSPORTS_MEEK, remoteAddress, options);
}

但是,在自述文件 (https://github.com/guardianproject/AndroidPluggableTransports) 中,建议的方法是:

Properties options = new Properties();
String bridgeAddress = "https://meek.actualdomain.com";
options.put(MeekTransport.OPTION_FRONT,"www.somefrontabledomain.com");
options.put(MeekTransport.OPTION_KEY,"18800CFE9F483596DDA6264C4D7DF7331E1E39CE");
init("meek", bridgeAddress, options);
Transport transport = Dispatcher.get().getTransport(this, PT_TRANSPORTS_MEEK, options);
if (transport != null)
{
Connection conn = transport.connect(bridgeAddress);
//now use the connection, either as a proxy, or to read and write bytes directly
if (conn.getLocalAddress() != null && conn.getLocalPort() != -1)
setSocksProxy (conn.getLocalAddress(), conn.getLocalPort());


ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write("GET https://somewebsite.org/TheProject.html HTTP/1.0".getBytes());
conn.write(baos.toByteArray());

byte[] buffer = new byte[1024*64];
int read = conn.read(buffer,0,buffer.length);
String response = new String(buffer);
}

在后一种方法中,桥接地址被传递给 init() 方法。在第一种方法中,它是传递给 init() 方法的远程地址,而桥接地址作为选项传递。这些方法中哪一种是正确的?

此外,如果您对 OPTION_URL、OPTION_FRONT 和 OPTION_KEY 提出一些意见,我将不胜感激。这些信息来自哪里?如果我不想使用这些默认信息,我该如何设置一个“Meek 端点”,例如不使用默认的 Tor 端点? CDN 上有什么特别需要做的吗?我如何使用 Amazon 或 Google 而不是 aspnetcdn?

如您所见,我很困惑。

最佳答案

感谢您对这个图书馆的兴趣。不幸的是,我们还没有正式发布,它还处于开发的早期阶段。

但是,我们认为我们仍然可以提供帮助。

首先,应该明确的是,支持域前端的主要云提供商(谷歌、亚马逊、Azure)现在非常反对。因此,您可能会发现使用这些平台中的任何一个都有一些限制,尤其是在您无法控制的前端域中。

您可以在此处阅读有关 Tor 和 Signal 自己的斗争:https://signal.org/blog/looking-back-on-the-front/https://blog.torproject.org/domain-fronting-critical-open-web

现在,就是说,如果您仍然想继续使用域前端,并且您使用的只是 HTTP/S,那么您可以这样做,根本不需要使用 Meek。您只需将请求中的“主机” header 设置为您要访问的实际域,而请求本身使用前端域。其实很简单。

您可以在此处阅读更多信息:https://www.bamsoftware.com/papers/fronting/#sec:introduction

关于java - 使用 Meek Transport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50983630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com