在可以root的系统中输入以下命令禁止ipv6
echo 1 > /proc/sys/net/ipv6/conf/wlan0/disable_ipv6
设备连接wifi或网络,测试:
通过 ADB shell 执行 ip addr show wlan0,查看输出中是否还有 inet6 开头的行。
sss:/ # ip addr show wlan0
28: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 40:45:da:dd:ef:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.131/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::9b0c:5a6e:cd4e:7821/64 scope link stable-privacy
valid_lft forever preferred_lft forever
成功后应该是如下:
sss:/ #ip addr show wlan0
28: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 40:45:da:ba:ca:86 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.107/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
使用 ping 命令测试,确保网络访问正常。
使用 adb logcat | grep -i ipv6 或 adb logcat | grep -i reachability 查看是否有相关错误或事件 。
其他方式,可以同时使用
system/core/rootditr/init.rc
#on boot
on property:sys.boot_completed=1
start networkshell
write /proc/sys/net/ipv6/conf/all/disable_ipv6 1
write /proc/sys/net/ipv6/conf/default/disable_ipv6 1
write /proc/sys/net/ipv6/conf/lo/disable_ipv6 1
write /proc/sys/net/ipv6/conf/wlan0/disable_ipv6 1
添加系统属性
PRODUCT_PROPERTY_OVERRIDES += \
net.ipv6.conf.all.disable_ipv6=true \
net.ipv6.conf.default.disable_ipv6=true \
net.ipv6.conf.wlan0.disable_ipv6=true \
ro.product.ethernet.ipv6.default_enable=false \
persist.sys.ethernet.ipv6.enable= false
bionic/libc/dns/net/getaddrinfo.c
query_ipv6 设置为false或者关闭
+++ b/bionic/libc/dns/net/getaddrinfo.c
@@ -1936,7 +1936,7 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap)
query_ipv6 = _have_ipv6(netcontext->app_mark, netcontext->uid);
query_ipv4 = _have_ipv4(netcontext->app_mark, netcontext->uid);
}
- if (query_ipv6) {
- /*if (query_ipv6) {
q.qtype = T_AAAA;
if (query_ipv4) {
q.next = &q2;
@@ -1946,7 +1946,8 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap)
q2.answer = buf2->buf;
q2.anslen = sizeof(buf2->buf);
}
- } else if (query_ipv4) {
-
} else */
-
if (query_ipv4) {
q.qtype = T_A;
} else {
free(buf);