小工具知识网

当前位置: 首页 > 行业知识 > Android 13 动态启用或禁用IPV6

行业知识

Android 13 动态启用或禁用IPV6

2026-11-09 19:37:52 来源:互联网转载

介绍

客户想要通过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 switchimport 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};

上一篇:麻雀优化算法SSA及其改进策略

下一篇:怎么做网站交易?