我们假设一个场景,所有网络流量都通过在Android设备上运行的本地代理重定向。
在代理中,是否可以查看哪个应用程序(根据包名称,应用程序名称......)发起了特定的网络呼叫?
编辑:道歉,我这里的细节很简短。我指的是HTTP协议,因此网络调用只是对某个URL的HTTP请求(GET或POST)。答案 0 :(得分:1)
取决于应用程序在数据包上发送的信息。如果你问网络数据包(你没有指明你所指的是哪个协议)默认情况下有关于发送它的应用程序的信息,那么答案是否定的。
但是您可以研究给定应用程序集的数据包,将此信息存储在代理中,然后您可以在给定足够数据包的情况下检测源应用程序。当然,这不会产生有关您不知道的应用程序的信息。
编辑:如果是HTTP请求,那么HTTP标头通常包含有关发起此请求的应用程序的信息(例如浏览器版本)。
答案 1 :(得分:1)
我找到了办法。实际上,有点变通方法,但似乎正在运作完美无缺。
我写了simple Android library这样做,如果有人想检查出来的话。它基于以下事实:每个套接字都被映射为文件中的条目,称为 / proc / net / tcp (或 / proc / net / tcp6 ,用于IPv6-基础连接)。
这意味着,对于每个条目,我们都可以读取其端口及其关联的PID。
基本上,库的主要方法执行以下步骤:
Socket
个对象或关联的端口(Socket.getPort()
)PackageManager.getPackagesFromPid()
方法,我们可以获取有关源应用程序的唯一信息,例如包名称和应用程序版本表现非常好,因为 / tcp * 文件通常不超过50个条目。