运行在安卓设备上的本地代理服务器

8
我正在尝试编写一个HTTP代理服务器,它将在设备上运行。事实上,需要找到一种捕获设备生成的出站HTTP流量的方法。
目前我编写的代码可以成功编译,它基于此处找到的代码:http://www.jtmelton.com/2007/11/27/a-simple-multi-threaded-java-http-proxy-server/ 问题在于向实际服务器发出的HTTP请求会被阻塞并且永远不会返回。
是否有更好的方法编写这样的服务而无需对设备进行root处理?
3个回答

4
你应该检查SandroProxy。如果使用操作系统代理设置或根设备上的iptables规则,则可以捕获非根设备上的流量。流量存储在本地sqlite数据库中。捕获的数据也可以通过Chrome开发工具进行检查。要捕获应用程序中的流量,您应该检查插件的源代码。它具有所有iptables重定向和适当设置的代码。
请查看Google源代码上的wiki链接HowToInterceptTrafficOnMyOwn。

http://code.google.com/p/sandrop/wiki/HowToInterceptTrafficOnMyOwn

顺便说一句:由Sandroproxy支持发送 :)


嗨SandroProxy支持!谢谢你的帮助。我会尝试一下并在这里发布结果。 - fran6
你好,请问能帮忙吗?我在使用AndroidStudio时遇到了一个问题,无法加载System.loadLibrary("socketdest")。我不知道如何构建jni库。谢谢。 - fran6
1
你可以使用这个,这样就可以跳过构建它了。http://code.google.com/p/sandrop/downloads/detail?name=libsocketdest.so - SandroProxy support
1
SandroProxy 支持你,棒极了! - fran6
为了帮助您更多。对于 SSL,您需要信任 SandroProxy CA 证书。有时这还不够,因为应用程序使用证书固定(例如:Twitter)。 - SandroProxy support

0

0

我一直在使用一个叫做ProxyDroid的软件将我的设备作为代理服务器,这是我找到的唯一不需要root权限的软件。我不确定它是否对你有所帮助,但它是一个开源项目,代码可以在这里找到:

https://github.com/madeye/proxydroid

我注意到应用程序会在一段时间后冻结,或者如果一次发送了大量请求,但我还没有机会找出这是为什么。


嗨,Kennifer!这非常好,我会尝试一下。性能限制目前不是一个大问题,因为我只是在做概念验证。 - fran6
嗨,Kennifer,我发现ProxyDroid对我来说并不起作用,因为我只想捕获和拦截流量。使用ProxyDroid时,我需要连接到代理服务器 :-( - fran6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接