Создать профиль VPN программно для Android

Я разбирал в Интернете способ создания VPN-клиента на Android. Я не могу найти хорошие ресурсы о том, как это сделать.

Цель состоит в том, чтобы я хотел иметь возможность настроить VPN с помощью встроенной функции VPN в Android (возможно, с программным добавлением нового подключения) или иным образом.

Я наткнулся на VpnService в документах, но неясно, как его использовать. У кого-нибудь есть хороший пример этого и возможно ли это с Android SDK как в это время?

1 ответ

Android предоставляет пример кода ToyVpn, который вы можете посмотреть и использовать логику для своих нужд.


А вот некоторые подробности из документации

В этом классе есть два основных метода: prepare(Context) и VpnService.Builder.establish(). Первый касается действий пользователя и останавливает VPN-соединение, созданное другим приложением. Последний создает интерфейс VPN с использованием параметров, предоставленных VpnService.Builder. Прикладная программа должна вызывать prepare (Context), чтобы предоставить право на использование других методов в этом классе, и это право может быть отозвано в любое время. Вот основные шаги для создания VPN-соединения:

  1. Когда пользователь нажимает кнопку для подключения, вызовите prepare (Context) и запустите возвращенное намерение, если оно не равно NULL.

  2. Когда приложение будет подготовлено, запустите службу.

  3. Создайте туннель для удаленного сервера и согласовайте параметры сети для VPN-подключения.

  4. Укажите эти параметры в VpnService.Builder и создайте интерфейс VPN, вызвав VpnService.Builder.establish().

  5. Обрабатывать и обмениваться пакетами между туннелем и дескриптором возвращаемого файла.

  6. Когда onRevoke() вызывается, закройте файловый дескриптор и корректно выключите туннель.

Службы, расширяющие этот класс, должны быть объявлены с соответствующим разрешением и фильтром намерений. Их доступ должен быть защищен разрешением Manifest.permission.BIND_VPN_SERVICE, а их фильтр намерений должен соответствовать действию SERVICE_INTERFACE. Вот пример объявления службы VPN в AndroidManifest.xml:

<service android:name=".ExampleVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
 </service>
Другие вопросы по тегам