Подтвердить что ты не робот

Android: пример кода для использования собственного VPN-соединения в Android 4.0 с использованием API VPNService

Я новичок в android, и я пытаюсь установить и подключиться к нашему собственному vpn (не по умолчанию vpn провайдеры, т.е. PPTP, L2TP и т.д., который присутствует в Android Setting -> Wireless and Networks). программно.

Мой сценарий: у меня есть кнопка, и когда я нажимаю кнопку, мне нужно настроить свой собственный vpn, а ссылка (например, www.google.com) должна пройти через vpn, который я настроил.

Есть ли какой-нибудь пример кода?

4b9b3361

Ответ 1

Я не знаю, почему я много раз искал Google, но не искал поиска. Глядя на века, я наконец нашел красивое написанное. Код буквально красив, что редко:

https://github.com/hexene/LocalVPN

В проекте не используется NDK или любой собственный код, чисто java, что делает его идеальным началом для простого проекта (не для того, чтобы он не был хорош для сложного). И рабочий процесс довольно прост:

  • Когда приложение отправляет исходящий запрос (запрос от ОС Android на какой-либо сервер в Интернете), запрос приходит LocalVPNService.class
  • В LocalVPNService проверяется TCP/UDP-пакет и извлекается IP-адрес источника и получателя (для этого используется Packet.class).
  • LocalVPNService устанавливает соединение от имени приложения, запускающего запрос, и вызывает VpnService.protect() для вновь созданного соединения, чтобы избежать циклов.
  • Затем соединения передаются обработчикам, которые просто передают байты из/в два соединения в цикле. Потоки для ввода/вывода UDP/TCP управляются в разных рабочих классах и потоках.

Как вы можете видеть, гексен выполнил всю тяжелую работу и тяжелую работу уже.

Все классы, упомянутые выше, находятся в каталоге проектов. Я быстро просмотрел исходный код из github, описанный здесь рабочий процесс может быть неточным.

Ответ 2

Вы можете обратиться к образцу приложения ToyVpn, который поставляется вместе с вашим SDK для Android. поэтому просто перейдите к образцам и обратитесь к этому приложению. Также см. this

В дополнение к этому вы можете загрузить исходный код Openvpn. Вот ссылка на это

https://github.com/kghost/ics-openvpn

Спасибо