web-dev-qa-db-ja.com

Android:VPNService APIを使用してAndroid 4.0で独自のVPN接続を使用するサンプルコード

Androidが初めてで、独自のvpnを確立して接続しようとしています(デフォルトのvpnプロバイダーではありません、つまりPPTPL2TP etc Android Setting -> Wireless and Networks)プログラムで。

私のシナリオは、ボタンがあり、ボタンをクリックすると、独自のvpnを設定する必要があり、リンク(www.google.comなど)がそのVPNを通過するはずです。

サンプルコードはありますか?

19
Sudarshan

私が何千回グーグルで検索したのかはわかりませんが、github's searchでした。今年齢を探して、私は最終的に書かれたものを見つけましたbeautifully。コードは文字通り美しく、まれです:

https://github.com/hexene/LocalVPN

プロジェクトは、notNDKまたは任意のネイティブコード(純粋なJava)を使用します。複雑なもの)。ワークフローは非常に簡単です。

  • アプリがアウトバウンドリクエストを行うと(Android OSからインターネット上のサーバーへのリクエスト)、リクエストは_LocalVPNService.class_
  • LocalVPNServiceでTCP/UDPパケットが調査され、ソースIPと宛先IPが抽出されます(_Packet.class_が使用されます)。
  • LocalVPNServiceは、リクエストを開始するアプリに代わって接続を作成し、ループを回避するために、新しく作成された接続でVpnService.protect()を呼び出します。
  • その後、接続はハンドラーに渡されます。ハンドラーは、ループで2つの接続との間で単純にバイトを渡します。 UDP/TCP In/Outのスレッドは、異なるワーカークラスとスレッドで管理されます。

ご覧のように、ヘキセンはすでにすべてのハードワークと重労働を行っています。

上記で参照したすべてのクラスは、プロジェクトディレクトリにあります。 githubからソースコードをざっと見てみましたが、ここで説明したワークフローは正確ではない可能性があります。

32
hkoosha

Android SDK。にバンドルされているサンプルアプリケーションToyVpnを参照できます。サンプルに移動して、そのアプリケーションを参照してください。 this

これに加えて、Openvpnのソースコードをダウンロードできます。以下はそのためのリンクです

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

ありがとう

8
Juned
4
gunwin