我打开一个套接字并跟踪 Android 应用程序中的网络调用。目前,我可以使用
DatagramPacket
类查看传入网络流量的主机名和 IP 地址。是否可以使用它获得 application id
或 package name
?或者是否可以从 DNSResolver 中的 IPPacket 获取 application ID
或 package name
?
经过长时间的搜索和阅读Android相关网络的文档,我找到了获取操作系统分配的应用程序ID的解决方案。通过这个ID可以找到网络数据包的来源。
ID 是一个整数,在比较 ID 之前,使用
PackageManager
获取操作系统分配的应用程序 ID 非常重要。
val local = InetSocketAddress(sourceHostAddress, sourcePort)
val remote = InetSocketAddress(destinationHostAddress, destinationPort)
val connectivityManager = instance.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager;
val uId = connectivityManager.getConnectionOwnerUid(protocol, local, remote);
协议 TCP = 6 UDP = 17