Android 13 动态启用或禁用IPV6

news2025/1/18 9:53:41

介绍

客户想要通过APK来控制IPV6的启用和禁用,这里我们通过广播的方式来让客户控制IPV6。

效果展示

adb shell

ifconfig

这里我们用debug软件,将下面节点置为1 如图ipv6已被禁用了 

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

修改

接下来我们通过代码控制,动态注册广播

custom.action.intent.ipv6.on   //禁用ipv6

custom.action.intent.ipv6.off   //启用ipv6

路径:frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

//*/soda water.20232328.ipv6 switch
import java.io.BufferedWriter;
import java.io.FileWriter;
//*/


    //我们在 init 中动态注册广播
    public void init(Context context, IWindowManager windowManager,
            WindowManagerFuncs windowManagerFuncs) {

        //*/soda water.20232327.ipv6 switch
        filter = new IntentFilter();
        filter.addAction("custom.action.intent.ipv6.on");
        filter.addAction("custom.action.intent.ipv6.off");
        context.registerReceiver(Ipv6Receiver, filter);
        //*/

    }



    //此处我们监听广播 这里定义广播
    //*/soda water.20232327.ipv6 switch
    BroadcastReceiver Ipv6Receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if ("custom.action.intent.ipv6.on".equals(intent.getAction())) {
            setIpv6(true);
            Log.d("soda water","on");
            }else if ("custom.action.intent.ipv6.off".equals(intent.getAction())){
            setIpv6(false);
            Log.d("soda water","off");
            }
        }
    };

    private static void setIpv6(Boolean commod) {
        BufferedWriter bufWriter;
        try {
            bufWriter = new BufferedWriter(new FileWriter("/proc/sys/net/ipv6/conf/all/disable_ipv6"));
            Log.d("soda water","one");
            bufWriter.write(commod?"1":"0");
            Log.d("soda water","two");
            bufWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //*/

接下来我们尝试用apk发送广播

public class MainActivity extends AppCompatActivity {
    private ToggleButton tg_button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tg_button = findViewById(R.id.bt_switch);
        tg_button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                Intent intent = new Intent();
                if (b) {
                    intent.setAction("custom.action.intent.ipv6.on");
                    sendBroadcast(intent);
                } else {
                    intent.setAction("custom.action.intent.ipv6.off");
                    sendBroadcast(intent);
                }
            }
        });

    }
}

验证发现缺少avc写入的权限

adb shell

logcat | grep avc

12-26 19:52:25.616  1310  1310 W system_server: type=1400 audit(0.0:193): avc: denied { write } for name="disable_ipv6" dev="proc" ino=27000 scontext=
u:r:system_server:s0 tcontext=u:object_r:proc_net:s0 tclass=file permissive=0

上面显示 proc_net 在 system_server 中没有 write 权限

在如下路径补上如下代码 此时在此发送广播发现可以动态控制ipv6的启用和禁用了

路径:system/sepolicy/private/system_server.te

allow system_server proc_net:file {open write getattr};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1340262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eclipse安装Jrebel eclipse免重启加载项目

每次修改JAVA文件都需要重新启动项目,加载时间太长,eclipse安装jrebel控件,避免重启项目节省时间。 1、Help->Eclipse Marketplace 2、搜索jrebel 3、Help->jrebel->Configuration 配置jrebel 4、激活jrebel 5、在红色框中填入 http://jrebel…

Linux 查看系统类型和版本(内核版本 | 发行版本)

Linux 查看系统类型和版本 首先普及下linux系统的版本内容1. 查看linux系统内核版本2. 查看linux系统发行版本 首先普及下linux系统的版本内容 内核版本和发行版本区别 内核版本就是指 Linux 中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x86_64发行…

新建虚拟环境并与Jupyter内核连接

第一步:在cmd里新建虚拟环境,shap38是新建的虚拟环境的名字 ,python=3.x conda create -n shap38 python=3.8第二步,安装ipykernel,打开anconda powershell prompt: 虚拟环境的文件夹位置,我的如图所示: 进入文件夹并复制地址: 输入复制的文件夹地址更改文件夹:…

Leetcode—62.不同路径【中等】

2023每日刷题&#xff08;七十二&#xff09; Leetcode—62.不同路径 超时dfs代码 class Solution { public:int uniquePaths(int m, int n) {int starti 1, startj 1;int ans 0;function<void(int, int)> dfs [&](int i, int j) {if(i m && j n) {a…

Java中XML的解析

1.采用第三方开元工具dom4j完成 使用步骤 1.导包dom4j的jar包 2.add as lib.... 3.创建核心对象, 读取xml得到Document对象 SAXReader sr new SAXReader(); Document doc sr.read(String path); 4.根据Document获取根元素对象 Element root doc.getRootElement(); …

建筑红板与黑板在实际应用中有何区别?

在建筑行业中&#xff0c;红板和黑板作为常用的建筑模板材料&#xff0c;各自有着独特的应用场景和性能特点。了解这两种板材的区别对于选择合适的建筑材料至关重要。 材质和制作工艺的差异**建筑红板**&#xff1a;通常是指涂有红色脱模油漆的模板&#xff0c;这种油漆能够提高…

windows无命令升级node版本

1. node最新版本下载链接 点击最新下载链接&#xff0c;找到对应版本下载并解压 2. 通过命令where node找到node.exe位置 3. 将该位置的node.exe替换为下载解压的最新node.exe 4. 重新执行node -v查看版本

linux如何清理磁盘,使得数据难以恢复

sda 是硬盘&#xff0c;sda1 和 sda2 是硬盘的两个分区。centos-root 是一个逻辑卷&#xff0c;挂载在根目录 /。 /dev/sda 是硬盘&#xff0c;/dev/sda1 和 /dev/sda2 是硬盘的两个分区。 [rootnode2 ~]# dd if/dev/urandom of/dev/sda bs4M这个命令将从 /dev/urandom 读取随…

C语言停车场模型详解

C语言停车场模型详解 1. 引言2. 代码概述3. 代码详解3.1 定义常量和数据结构3.2 初始化车库3.3 查找车辆所在车库3.4 查找车辆所在的车位3.5 打印车库状态3.6 打印等候车辆3.7 车辆入库3.8 车辆出库3.9 菜单功能3.10 主函数 5.效果展示5.完整代码6. 总结 1. 引言 本文将介绍一…

GC控制器(Garbagecollector)源码解析

KubeController Garbagecollector 本文从源码的角度分析KubeController Garbagecollector相关功能的实现。 本篇kubernetes版本为v1.27.3。 kubernetes项目地址: https://github.com/kubernetes/kubernetes controller命令main入口: cmd/kube-controller-manager/controller-…

【Redis】八、哨兵模式

文章目录 一、概述这里的哨兵有两个作用多个哨兵 二、哨兵测试1、配置哨兵配置文件 sentinel.conf2、启动哨兵3、断开Master节点 三、哨兵模式优点&#xff1a;缺点&#xff1a; 哨兵模式的全部配置 参考&#xff1a;狂神说Java bilibili哨兵模式 一、概述 自动选取老大的模式…

【Spring Security】认证之案例的使用、MD5加密、CSRF防御

目录 一、引言 1、什么是SpringSecurity认证 2、为什么使用SpringSecurity之认证 3、实现步骤 二、快速实现&#xff08;案例&#xff09; 1、添加依赖 2、配置 3、导入数据表及相关代码 4、创建登录页及首页 5、创建配置Controller 6、用户认证 6.1、用户对象User…

Bind for 0.0.0.0:2379 failed: port is already allocated

1、执行命令docker-compose -p docker-apisix up -d 报错 Error response from daemon: driver failed programming external connectivity on endpoint docker-apisix-etcd-1 (2a92a0cefff9194fcd1dad4bdeabf4201d9047ec2633eda455c6e46528668af4): Bind for 0.0.0.0:2379 fa…

YoloV8改进策略:基于自研的图注意力机制改进| 独家改进方法|图卷积和注意力融合模块

摘要 SE注意力机制是一种通过显式建模卷积特征的信道之间相互依赖性的方法,旨在提高网络产生的表示的质量。SE注意力机制包括两个步骤:Squeeze和Excitation。在Squeeze步骤中,通过全局平均池化操作将输入特征图压缩成一个向量,然后通过一个全连接层将其映射到一个较小的向…

全志R128 DSP开发工具安装教程

资料准备 要编译和仿真DSP&#xff0c;需要以下资料&#xff1a; DSP 核 SDK&#xff0c;SDK 需要包含DSP 编译源码。Cadence Xtensa 的 Windows IDE 工具 (Xplorer‑8.0.13 版本)&#xff0c; Windows 版本 DSP 的 package 包。Cadence Xtensa 的 License&#xff0c;用于服…

STM32 基础知识(探索者开发板)--93讲 PWM

预分频器相当于一个计数器&#xff0c;2分频就是接收2个脉冲传递一个脉冲&#xff0c;3分频就是接收3个脉冲传递一个脉冲&#xff0c;最高65535分频&#xff0c;那么总计时间能达到65535*65535*1/72MHZ 约59秒&#xff0c;没有分频器只能计数最高0.09秒 PWM配置步骤 1.配置定时…

数据分析工具 Top 8

你能想象一个没有工具箱的水管工吗? 没有,对吧? 数据从业者也是如此。如果没有他们的数据分析工具&#xff0c;数据从业者就无法分析数据、可视化数据、从数据中提取价值&#xff0c;也无法做数据从业者在日常工作中做的许多很酷的事情。 根据你最感兴趣的数据科学职业——数…

企业数据可视化-亿发数据化管理平台提供商,实现一站式数字化运营

近些年来&#xff0c;国内企业数据化管理升级进程持续加速&#xff0c;以物联网建设、人工智能、大数据和5G网络等新技术的发展&#xff0c;推动了数字经济的蓬勃发展&#xff0c;成为维持经济持续稳定增长的重要引擎。如今许多国内中小型企业纷纷摒弃传统管理模式&#xff0c;…

ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现

ThinkPHP6.0任意文件上传 PHPSESSION 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建安装thinkphp6漏洞信息配置 漏洞利用 修复建议 漏洞名称 漏洞描述 2020年1月10日&#xff0c;ThinkPHP团队发布一个补丁更新&#xff0c;修复了一处由不安全的SessionId导致的任意文…

读取无标题列表txt文本文件

文件如下&#xff1a; 使用pandas直接读取&#xff0c;有多少条数据&#xff0c;就会读出来多少列&#xff1a; import pandas as pdfilepath/Users/。。。/ file1失败名单.txt df1pd.read_csv(filepathfile1,sep,,headerNone) 会打印出无数列数据&#xff1a; 使用open方法读…