有没有办法将我的Android代理应用程序从数据使用屏幕中排除?
我有一个在android设备中设置转发代理的系统应用程序。问题是,由于所有流量都被重定向到该应用程序,因此“设置”下的“数据使用情况”屏幕显示的所有流量都来自我的应用程序,而不是其他应用程序 阅读本文:帮助我理解,除非应用程序是使用系统映像构建的,否则不能将其从数据使用中排除。然而,VPN服务能够将自己从数据使用中排除,所以如果我能找到一个黑客来做到这一点,它将对我有用 当查看android系统文件/proc/net/xt_qtaguid/ctrl时,它清楚地显示所有套接字连接都被标记为我的应用程序的uid 我查看了qtaguid.c,并尝试实现相同的机制,但问题是我甚至无法从我的socketChannel获取文件描述符。由于android使用SocketChannelImpl,我尝试使用反射来获取fd,但这不起作用:有没有办法将我的Android代理应用程序从数据使用屏幕中排除?,android,sockets,proxy,nio,Android,Sockets,Proxy,Nio,我有一个在android设备中设置转发代理的系统应用程序。问题是,由于所有流量都被重定向到该应用程序,因此“设置”下的“数据使用情况”屏幕显示的所有流量都来自我的应用程序,而不是其他应用程序 阅读本文:帮助我理解,除非应用程序是使用系统映像构建的,否则不能将其从数据使用中排除。然而,VPN服务能够将自己从数据使用中排除,所以如果我能找到一个黑客来做到这一点,它将对我有用 当查看android系统文件/proc/net/xt_qtaguid/ctrl时,它清楚地显示所有套接字连接都被标记为我的应用
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);
我想即使这样做有效,我也不知道标记是如何生成的,这样我就可以在每个连接中切换它。我知道这个标签的最后4个字节是创建十六进制套接字的应用程序的uid,但仅此而已
这些都有可能吗?谢谢大家! 我想已经太晚了,但无论如何 您应该标记用于建立远程连接的客户端套接字,而不是服务器套接字