Cambiar el DNS de la red móvil en Lollipop y versiones posteriores

Ok, esta es una pregunta constante, cómo cambiar el DNS de la red móvil. Pero en diferentes versiones de Android, obtendrá un método diferente. Así que esta es la razón por la que pregunto esto.

Ya he conocido un método para Android 4 e inferior. Ahora, quiero saber cómo cambiar el DNS de la red móvil en Android 5.0 Lollipop y versiones posteriores.

Una pista:

ndc resolver setnetdns <netId> <domains> <dns1> <dns2>

Alguien dijo que debería usar este comando para cambiar el DNS de la red móvil en Lollipop y más, pero ¿qué es netId? ¿Dónde puedo encontrar este valor? ¿Podrías darme un ejemplo?

No soy un programador de C/C++, pero trato de leer el código fuente relativo, que se encuentra netidse transformará en un tipo largo sin firmar por strtoulfunción. Así que supongo que netiddebería ser una cadena hexadecimal. Intento usar netcfgel valor de salida, pero no funciona.

¿Podría darme más explicación sobre este método? ¿Cómo usarlo? ¿O hay algún otro método efectivo para cambiar el DNS de la red móvil en Lollipop y más?

Relacionado: android.stackexchange.com/a/71615/44325 , aunque el comando no parece funcionar en Lollipop, pero la aplicación afirmó que funciona en Lollipop. Tal vez podrías intentarlo.
@AndrewT. Leí la publicación que dijiste antes de hacer esta pregunta. Gracias de todos modos. El método es solo para Android 4.X y el autor no abrió su código. Quiero encontrar un método, no una aplicación. PD Gracias por editar mi pregunta.
@Gino Soy el autor de Override DNS y también actualicé la aplicación para que funcione en Lollipop. No he encontrado una manera de obtener el netIdvalor de la CLI. Lo estoy obteniendo a través de un método Java.

Respuestas (1)

Ya no uso Lollipop en mi teléfono. Sin embargo, dado que su pregunta es sobre Lollipop en adelante, y yo uso Marshmallow, puedo confirmar que:

ndc resolver setnetdns devname dnsdomain dns1 dns2

obras. Parece que ya no necesita saber la ID de red en Marshmallow, y solo necesita el nombre del dispositivo.

Así por ejemplo:

ndc resolver setnetdns rndis0 "" 8.8.8.8 8.8.4.4

establecerá el DNS para la interfaz rndis0 en los servidores DNS públicos de Google.

Esto no funciona en mi dispositivo Lollipop:/ Por cierto, ¿qué es dnsdomain?
Eso es muy malo. Supongo que cambiaron el código algún tiempo después de Lollipop, por lo que ya no necesita saber el netId, solo el devname. No estoy completamente seguro, pero creo que dnsdomaines el dominio de búsqueda. Por ejemplo, si lo tiene configurado en "lan" y escribe "my-home-pc", el sistema intentará resolver "my-home-pc.lan".
@LéoLam ¿estás seguro de que ya no lo necesitas netId? Tengo un Nexus 5 con Android 6.0.1 y no me funciona. Con el netId, no hay problema. Probé solo en una red Wi-Fi, investigaré un poco más.
hmm, eso es muy raro. ¿Está ejecutando 6.0.1 stock o CM13? Actualmente estoy usando CM13 y funcionó sin netId cuando lo probé por última vez (en enero). Mirando el código fuente de 6.0.0, el segundo argumento (el que está justo después de setnetdns) se pasa a stringToNetId, pero no estoy lo suficientemente familiarizado con el código fuente de Android y C++ para saber qué hace con precisión.