有没有办法从数据使用情况屏幕中排除我的Android代理应用程序?

时间:2014-09-17 02:10:43

标签: android sockets proxy nio

我有一个系统应用程序,可在Android设备中设置转发代理。问题是,由于所有流量都被重定向到该应用,因此设置下的数据使用情况屏幕显示所有流量都来自我的应用而非其他应用。

阅读本文:https://source.android.com/devices/tech/datausage/index.html帮助我了解除非使用系统映像构建,否则不能从数据使用中排除应用程序。 (但是,VPNService能够将自己从数据使用中排除,所以如果我能找到一个黑客来做这件事,它对我有用。)

当查看android系统文件/ proc / net / xt_qtaguid / ctrl时,它清楚地显示所有套接字连接都被我的应用程序标记了。

我查看了qtaguid.c(https://github.com/cgjones/android-system-core/blob/master/libcutils/qtaguid.c)并尝试实现相同的机制,但问题是我甚至无法从socketChannel获取文件描述符。由于android使用SocketChannelImpl,我尝试使用反射来获取fd,但这不起作用:

clientChannel = server.accept();
Class<?> clientChannelImpl = Class.forName("java.nio.SocketChannelImpl");
Method method = clientChannelImpl.getDeclaredMethod("getFD", new Class<?>[0]);
FileDescriptor fd = (FileDescriptor) method.invoke(clientChannel, null);
Class fileDescriptorClass = FileDescriptor.class;
Field field = fileDescriptorClass.getDeclaredField("fd");
field.setAccessible(true);

我想即使这样有效,我也不知道如何生成TAG,以便我可以在每次连接时将其切换出来。我知道这个标签的最后4个字节是用十六进制创建套接字的应用程序的uid,但就此而言。

这有可能吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我想现在为时已晚,但无论如何。

您应该标记客户端套接字,用于建立远程连接的套接字,而不是服务器套接字。