AndroidデバイスでVPN接続をプログラムで設定する作業を行っています。OS 2.3.5 以前を使用しているデバイスでは、これを正常に行うことができました (非表示のクラスに到達するためにリフレクションを使用しました)。しかし、Android 4.0 では、古いクラスを取り除き、代わりに VPNService クラスを使用しています。
開始するのに最適な場所は、提供されている Android の ToyVPN の例を使用することだと考えましたが、多くの課題に直面しています。サンプル コードでは、サーバー アドレスを送信するだけで済みます。
InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));
次に、チャネルを開いて VPN トンネルを作成します。
tunnel = DatagramChannel.open();
しかし、私の場合、サーバーアドレス、ユーザー名、およびパスワードを送信する必要があります。これまでのところ、私はそうする方法を理解していません。私の最善の推測は、次のようなことをすることでした:
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user","pass".toCharArray());
}});
try {
// Create a DatagramChannel as the VPN tunnel.
tunnel = DatagramChannel.open();
しかし、これはうまくいきませんでした。だから私が求めているのは:
- ToyVpn で使用されている方法以外に、VPN 接続をプログラムで作成する方法はありますか?
- そうでない場合、サーバーへの接続を確立するときに資格情報を送信するにはどうすればよいですか?
編集
VPN の種類 (PPTP、L2TP、L2TP/IPSec PSK または L2TP/IPSec CRT) を指定する必要があることを忘れていました。