GUI 版「stone for Android」公開のお知らせ
本アプリは Android NDK を使用してビルドした 32ビットのネイティブバイナリを含んでいます。 先般 Google はこのようなアプリの Google Play での扱いについて以下の発表を行いました。
- 今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について - developers-jp.googleblog.com
2019 年 8 月に、Play ではネイティブ ライブラリを含む新しいアプリとアプリのアップデートは、32 ビット版に加えて 64 ビット版を提供することが義務づけられます。
- (関連記事)
Androidアプリ、2019年8月に64bit対応を義務化。2018年にはOreo以降をターゲット化へ - japanese.engadget.com
この話題を受け今後の対応を検討してきましたが、現時点での結論として、本アプリの 64ビット対応を行う予定はありません。そのため、現行のバージョン 1.0.3 が最終版となる見通しです。 そういった事情により、念のため現行版の apk のコピーを以下へ配置しています。
Android OS での 32ビットバイナリサポートがいつまで維持されるか現時点では不明ですが、必要な場合にはこれをご利用下さい。本アプリをご利用の皆様へ謹んで御礼申し上げます。
SSL 対応のパケットリピータ「stone」を Android 上で動かすことにはさまざまなメリットがあります。 以前このブログに次の記事を書きました。
・「パケットリピータ stone を Android へポーティング 」
・「Android 上のブラウザから SSL クライアント認証の必要なサーバへアクセスする方法」
当時は Android NDK でビルドしたネイティブの stone バイナリとビルド用リソースの一式を公開しましたが、その後 GUI 版の開発を手がけ、「stone for Android」として Android マーケットへの登録を行いました。
これはいわゆる「普通の Android アプリ」ですから端末へのインストールも取りまわしもとても簡単です。
興味のある方はぜひご利用下さい。ソースコードも公開しています。
ブラウザから端末へ PUSH インストールの可能なページ
■ GUI 版 stone を作った理由?
もともと stone を Android で動かしたいと考えたのは「自分で使うため」だったため、ELF 実行形式を USB ケーブル経由で端末へ持ち込んでターミナルエミュレータ上で操作するというやり方にそれほど不満は感じていませんでした。 しかし、社内には私と同様に「Android のブラウザから SSL-VPN 経由で社内のイントラにアクセスしたい!」という向きが多い反面、やり方を説明すると技術系以外のメンバーは端末へケーブルをつなぐという手順の時点で急に及び腰になり結局そのまま、という状況が多く見られました。
それを見過ごすのも何だかしのびなく、ネイティブの stone バイナリを内蔵しそのラッパとして動作する簡単な GUI アプリを作り社内で配ってみたところ、ケーブルもターミナルソフトも要らないため楽だと喜ばれました。そして、それを見た別方面から「どうせならイントラ専用ツールではなく Android 用の stone として体裁を整え公開してはどうか?何だかんだ言っても GUI の方が便利だし」という意見が寄せられました。これが「stone for Android」を開発したきっかけです。
■ インストール方法
「stone for Android」は Android マーケットで公開しています。端末へのインストールにはこの記事の冒頭に記載の QR コードを利用するか、PC 上のブラウザから端末へ PUSH インストールの可能なページを利用して下さい。
■ 使い方 1: 概要
以下、本アプリの使い方を簡単に説明します。
インストール後にラウンチャアイコンをタップするとメインの画面が表示されます。最上段のフィールドに stone へのパラメータを記述し、「Run」ボタンを押下するとそのパラメータを使って stone プロセスがバックグラウンドで起動します。中段以下のエリアには stone がコンソール(stderr)出力したログメッセージがトレースされます。
初期状態では上段のフィールドに簡単なパラメータ記述例が示されています。これは「-dd www.gcd.org:80 localhost:1234」という内容で、localhost の 1234 番ポートへのアクセスを http://www.gcd.org/ (stone 公式ページを含むサイト)へ繋ぐ指定です。動作確認をかねてまずこのパラメータで stone を走らせてブラウザから「http://localhost:1234」へのアクセスを試してみるといいでしょう。
stone プロセスがバックグラウンドで稼動している間、端末のステータスバー(通知領域)には「石」のアイコンが表示されます。稼動中に「Stop」ボタンを押下するとユーザ確認を経て stone プロセスを終了します。 なお、本アプリは端末の BACK キーにより Exit しますが、stone プロセス稼動中に BACK キーを押下すると GUI のみを終了し stone はバックグラウンドで動作を継続します。再度本アプリを起動すれば GUI はふたたび stone プロセスと連携します。
デフォルトのサンプルパラメータで stone プロセスを起動し、ブラウザから「http://localhost:1234/」へアクセスを試して下さい。図の要領で「GCD's Homepage」が表示されれば stone は正しく動作しています。
■ 使い方 2: メニューの内容
本アプリのメニュー内容を以下に示します。「証明書のインストール」の項目は Android 2.x 以上の端末でのみ表示されます。証明書インストールについては次項で説明します。
■ 使い方 3: 証明書のインストールについて
本アプリは、Android 2.x 以上の端末において、Android キーストアへの証明書のインストールと参照に対応しています。[MENU] - [証明書のインストール] をタップして下さい。
下図左のメッセージが表示された場合は、Android の「認証情報ストレージ (Credential Storage)」の初期化が必要です。メッセージに添ってパスワードを設定後に再度本アプリでの操作を行って下さい。
下図右のパネルは認証情報ストレージがロック状態の場合に表示されます。端末の電源を投入した時点では認証情報ストレージはロックされています。設定ずみのパスワードでこれを解除して下さい。
認証情報ストレージを利用できる状態になると、SD カード上に存在する証明書ファイルが一覧表示されます。インストール対象とする証明書ファイル名をタップすると処理が始まります。証明書パスワードの問い合わせに対し正しいパスワードを投入すると証明書ファイルから情報が抽出され、最後に識別用の名前の問い合わせが行われます。特に理由がなければデフォルトのままで良いでしょう。
証明書のインストールが正常に終了すると、その証明書を指定したパラメータ記述例がパラメータフィールドに提示されます。ホスト名その他の指定を適宜変更して利用して下さい。なお、「History」ボタンの押下により表示されるパラメータ履歴のリストには以前のパラメータも保持されています。
■ 最後に
長くなったので今回はアプリの紹介と使い方の話題にとどめますが、後日あらためて処理内容についても記事を書きたいと考えています。
■ ライセンスに関する情報
Copyright (C) 2011 KLab Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
本ソフトウェアは、オープンソースソフトウェアです。本ソフトウェアのソースコードは https://github.com/mkttanabe/stone-for-Android で公開しています。
本ソフトウェアは、パケットリピーター 「stone」 の著作権者である仙石浩明 (Hiroaki Sengoku) 氏との特別な合意に基づき CUI 版 stone の実行形式バイナリファイルを含んでいます。 この実行形式ファイルは本ソフトウェアプロジェクトの成果物ではありません。 stone のソースファイルは http://sourceforge.jp/cvs/view/stone/stone/ (revision 2.3.3.13) で公開されています。 ただし、本ソフトウェアが保持しているビルド以外の stone を本ソフトウェアとともに配布することは許されません。 また、改変した stone バイナリを含む本ソフトウェアを配布することもできません。
本ソフトウェアは、既存の以下のオープンソースソフトウェア資産を使用しています。
これらのソースファイルは、改変箇所にコメントを加えた上でオリジナルの「NOTICE」ファイルとともに前述のリポジトリに配置しています。
素晴らしいソフトウェアを公開されている各氏に深謝するとともに、私たちは本ソフトウェアがあなたにとって有用であることを願っています。
(tanabe)
* Cryptographic Software Notice *This software uses cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception Technology Software Unrestricted (TSU) for both object code and source code. (see the BIS Export Administration Regulations, Section 740.13)
この記事へのコメント
http://dsas.blog.klab.org/data/stoneforandroid/jp.klab.stone.apk
This URL is valid only for a few days. Thank you.
Thank you for uploading apk file :)
-dd 20.zzz.10.ooo:5354/tcp localhost:53/udp
But I can't execute this command on Android(works fine on Windows).
Maybe Android can't repeat dns packet.
Again,thank you for upload!
> But I can't execute this command on Android(works fine on Windows).
> Maybe Android can't repeat dns packet.
I've not tried such operation. But, at least, root privilege is required for your command. Since port 53 is a well-known port. Is your Android device rooted? If so, you can try CUI version of "stone version 2.3e for Android" on terminal emulator after "su" command.
http://dsas.blog.klab.org/archives/51813490.html
完全に(ROMレベルで)root化済です。
「su」コマンドでも失敗しました。
>6. 端末のターミナルアプリ上で stone を実行
$ export PATH=...(etc
$ su
#
# cd data/local/tmp
# ./stone
Nov 10 ...(etc...)
# ./stone -dd 20.zzz.10.ooo:5354/tcp localhost:53/udp
Nov 10...(etc
Nov 10...(etc
Nov 10 (Time) stone 12: Can't bind 127.0.0.1:domain err=0
#
(*) 20.zzz.10.ooo = My Server IP
VPN接続して使っていました。(050plusを使うため。)
12月からF-12Cに買い替えsimもイオンsimからイーモバイルsimに
切り替えました。
イーモバイルの契約プランがデータプランBのため
イオンsimで使えたVPNが使えません。
いろいろ調べてみたところ、stoneならHTTP / HTTPS プロトコルさえ
利用可能であればほぼすべての TCP/IP 上で動作するプロトコルを用いた
通信が可能だと思うのですが、間違ってますでしょうか?
stone for AndroidでGUI版となり敷居が
少しだけ下がったので勉強して使いたいと思ってます。
目指すは、制限で使えない(VOIP)を使うことです。
以下、不具合報告になります。
携帯端末のAPNのプロキシ設定部にプロキシ情報を設定していますが、この設定項目にはユーザ認証がないため、stoneでのリクエスト追加機能を使っています。
パラメタBOX内にて、
hogehoge.com/proxy 8080 'Proxy-Authorization: Basic 〜'
と指定した時、このパラメタを括るシングルクォートまで送信されているようです。
以下ダンプをとったサンプルです:
May 8 16:16:35.845985 3 4>5 'Proxy-Authorization: Basic 〜'<0d><0a>
となり、'まで一緒に送信されています。squidのログの方でもしっかりTCP_DENIEDが返却されます。
現在は、設定ファイルの方にパラメタを記述し、-Cで設定ファイルを指定する形で回避しています。
設定ファイルでの指定では正常動作しています。
回避方法があるのでいいのですが、今後もし何かのタイミングでクライアントアプリをアップデートされることがあれば、対応を検討していただければありがたいです。
https://play.google.com/store/apps/details?id=jp.klab.stone
テスト版の動作確認にご協力頂いた<匿名希望>様に謹んで御礼申し上げます。
http://dsas.blog.klab.org/archives/52211448.html#comments