在 Android 上,禁止其他应用程序访问网络是一个涉及系统级权限和安全性的复杂任务。一般情况下,普通应用程序无法直接禁止其他应用程序访问网络。
但是如果有ROOT就可以好办了
使用su执行以下命令即可禁止第三方应用联网
iptables -A OUTPUT -m owner --uid-owner 应用程序的UID -j REJECT
应用程序的UID获取方法
dumpsys package 包名 | grep userId
恢复联网
iptables -D OUTPUT -m owner --uid-owner 应用程序的UID -j REJECT
应用程序的 UID 在安装时会分配,并且通常在应用程序的生命周期中保持不变。但是,也有一些情况下应用程序的 UID 可能会发生变化,例如:
1、应用程序被卸载后重新安装:在重新安装应用程序时,系统可能会分配一个新的 UID 给该应用程序。
2、用户在设备上进行用户数据重置或恢复出厂设置:在执行此类操作后,应用程序的 UID 可能会发生变化。
假如应用的UID变了,我又忘了之前的UID,咋办?如果以后新安装的APP点背,分配了之前被禁的UID,导到APP无法联网就麻烦了
使用此种方式禁止联网后,在iptables里面无法直接看到应用的包名,所以无法直接找到,此时,可以使用以下命令查看当前网络控制
camellia:/ # iptables -L -n -v --line-numbers | grep REJECT 5 19 8757 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 owner UID match 9802 reject-with icmp-port-unreachable 6 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 owner UID match 9802 reject-with icmp-port-unreachable 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 match bpf pinned /sys/fs/bpf/prog_netd_skfilter_blacklist_xtbpf reject-with icmp-port-unreachable 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 connmark match 0x2000000/0x2000000 reject-with icmp-port-unreachable 3 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
看到了喵(喵看到,往右边滚滚,上面是有滚动条的),9802就是我用上面命令禁用掉的APP UID,再使用恢复命令删掉这9802的控制就行了
另外补充一下,对同一个uid 多次执行iptables -A ,会添加多条禁用规则,什么意思呢,比如我上方的有两条
owner UID match 9802 reject-with icmp-port-unreachable owner UID match 9802 reject-with icmp-port-unreachable
这个就是执行了2次iptables -A, 那么删除的时候也要执行2次 iptables -D,不然还是会继续拦截。懂了哈,我猜你懂了。
发表评论