Как обмануть Android при проверке подключения?

Я делаю сетевое приложение, используя Tun в качестве виртуального сетевого устройства на Android. Я закрываю другие доступные интерфейсы, такие как eth0 (для WLAN) и rmnet0 (для 3G/GPRS), но поддерживаю работу моего устройства tun0 и добавляю правило в таблицу маршрутов

ip route add default dev tun0

так что я могу перенаправить всю интернет-передачу на устройство Tun (то, что я делаю здесь, аналогично OpenVPN). И тогда я увидел передачу данных, когда я пинговал другой IP. Браузер и некоторые другие приложения работают нормально.

Но некоторые приложения для Android будут проверять подключение через ConnectivityManager, прежде чем получить доступ к сети. Так как я закрываю WIFI и 3G/GPRS, ConnectivityManager считает, что соединения нет, эти приложения больше не будут подключаться к сети.

Итак, мой вопрос:

Как обмануть android ConnectiviyManager, заставить его поверить, что еще есть доступное соединение (для любого типа)?

1 ответ

Я не думаю, что вы можете сделать это, и вы бы не хотели, это общесистемный сервис. Представьте, что ваше приложение использует подключение к Интернету, но какое-то вредоносное приложение могло сообщить вам, что оно есть, и сделать ваше приложение неспособным завершить свои действия. Это может вызвать серьезную проблему.

Если ваше приложение должно верить в наличие соединения в некоторых состояниях, я предлагаю вам связать классы подключения / сети, вы можете прочитать истинное состояние, но затем вернуть любое значение, которое вы считаете подходящим для вашего приложения.

Другие вопросы по тегам