Изменить DNS мобильной сети на Lollipop и выше

Хорошо, это постоянно задаваемый вопрос, как изменить DNS мобильной сети. Но в разных версиях Android вы получите другой метод. Вот почему я спрашиваю об этом.

Я уже знаю метод для Android 4 и ниже. Теперь я хочу знать, как изменить DNS мобильной сети на Android 5.0 Lollipop и выше.

Ключ:

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

Кто-то сказал, что я должен использовать эту команду для изменения DNS мобильной сети в Lollipop и выше, но что это такое netId? Где найти это значение? Не могли бы вы привести пример?

Я не программист C/C++, но я пытаюсь прочитать относительный исходный код, найденный netidбудет преобразован в беззнаковый длинный тип по strtoulфункции. Так что я думаю, netidдолжна быть шестнадцатеричная строка. Я пытаюсь использовать netcfgвыходное значение, но это не работает.

Не могли бы вы дать мне более подробное объяснение этого метода? Как это использовать? Или есть другой эффективный способ изменить DNS мобильной сети в Lollipop и выше?

Связано: android.stackexchange.com/a/71615/44325 , хотя команда, похоже, не работает на Lollipop, но приложение утверждает, что работает на Lollipop. Возможно, вы могли бы попробовать.
@ЭндрюТ. Я прочитал сообщение, которое вы сказали, прежде чем задать этот вопрос. Все равно спасибо. Метод только для android 4.X, и автор не открывал свой код. Я хочу найти метод, а не приложение. PS Спасибо за редактирование моего вопроса.
@Gino Я автор Override DNS , и я обновил приложение, чтобы оно работало и с Lollipop. Я не нашел способ получить netIdзначение из CLI. Я получаю это с помощью метода Java.
@Gino Вы пробовали это: android.stackexchange.com/a/68866/112458

Ответы (1)

Я больше не использую Lollipop на своем телефоне. Однако, поскольку ваш вопрос касается Lollipop и выше, а я использую Marshmallow, я могу подтвердить, что:

ndc resolver setnetdns devname dnsdomain dns1 dns2

работает. Похоже, вам больше не нужно знать идентификатор сети в Marshmallow, вам нужно только имя устройства.

Так, например:

ndc resolver setnetdns rndis0 "" 8.8.8.8 8.8.4.4

установит DNS для интерфейса rndis0 на общедоступные DNS-серверы Google.

Это не работает на моем устройстве Lollipop: / Кстати, что это dnsdomain?
Ах, это очень плохо. Я предполагаю, что они изменили код через некоторое время после Lollipop, поэтому вам больше не нужно знать netId, только имя разработчика. Не совсем уверен, но я думаю, dnsdomainчто это поисковый домен. Например, если для него установлено значение «lan» и вы набираете «my-home-pc», система попытается разрешить «my-home-pc.lan».
@LéoLam, ты уверен, что тебе это больше не нужно netId? У меня Nexus 5 с Android 6.0.1, и он у меня не работает. С netId, без проблем. Я пробовал только в сети Wi-Fi, я проведу дополнительные исследования.
хм, это действительно странно. У тебя сток 6.0.1 или СМ13? В настоящее время я использую CM13, и когда я в последний раз пробовал (в январе), он работал без netId. Глядя на исходный код для 6.0.0, второй аргумент (тот, что сразу после setnetdns) передается в stringToNetId, но я недостаточно знаком с исходным кодом Android и C++, чтобы точно сказать, что он делает.