Kali LinuxをVirtual Boxにインストールする

サイバーセキュリティプログラミング――Pythonで学ぶハッカーの思考を買った。 読む上でKali Linuxの環境が必要になってくるのでVirtual Box上に用意してみる。

Kali LinuxのISOイメージ用意

f:id:horie1024:20151107150509p:plain

Kali LinuxのサイトからISOイメージ(kali-linux-2.0-amd64.iso)をダウンロードする。

Kali Linuxのインストール

ダウンロードが完了したら以下のサイトを参考にVitrual Boxの仮想マシンを作成し、Kali Linuxをインストールする。

www.websec-room.com

インストールできた。

f:id:horie1024:20151107171047p:plain

AsyncTaskでtimeoutを指定する方法

AsyncTaskを利用してAPIへリクエストする際にTimeOutを指定したい場合がある。そのやり方のメモ。

final SampleTask task = new SampleTask();
task.execute();

// TimeOut処理
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            // TimeOutに10秒を指定
            // 10秒以内にTaskが終了しなければTimeoutExceptionを投げる
            task.get(10000, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
            // Exceptionをキャッチしtaskをキャンセルする
            task.cancel(true);
            e.printStackTrace();
        }
    }
}).start();

Cloud Test Labドキュメントのざっくり翻訳

概要

Cloud Test Labのドキュメントが公開されていたのでトップページだけざっくり翻訳してみた(英語は得意じゃない)。

原文

cloud.google.com

[翻訳] Google Cloud Test Lab

Google Cloud Test Labは、クラウドベースのAndroidアプリテスト環境を提供します。あなたは、たった一つの操作で、あなたのアプリに関するデバイスとデバイス設定を跨いだ幅広いテストを実行できるでしょう。テストの結果は、ログや動画、スクリーンショットを含み、Google Developers Consoleのあなたのプロジェクトから参照可能です。もしあなたがアプリに関するテストコードを書いていないのであれば、Cloud Test Labはあなたのアプリを自動的に動かし、クラッシュを発見するでしょう。

テストを実行する複数の方法

あなたは、アプリをテストする方法を選択できます。

  • Android Studio Pluginの利用して開発環境からアプリが正しい挙動をしているかテストします。
  • Command line interfaceを利用してインタラクティブに実行します。また、あなたの自動ビルド・テストプロセスの一部に組み込めます。
  • Google Developers Consoleに組み込まれたWeb UIを利用し、どこからでもAPKのアップロード、テストを実行できます。

デバイスタイプの選択

Virtual devices

Virtual devicesAndroid端末を正確にシミュレーションします。それらの端末は、テスト実行のスケジューリングについて高可用性を持ち、日々の開発や継続的テストに適しています。

Physical devices

Physical devicesではGoogleのデーターセンターにあるAndroid端末の実機にインストールされ実行されます。実機でのテストはリリース前のテストに適しており、Virtual devicesでのテストでは発見できなかった問題を発見する手助けになるでしょう。

テスト方法の選択

2種類のテスト方法が利用可能です。

Instrumentation tests

Instrumentation testsでは、あなたがEspressoやRobotiumを利用して書いたテストを実行します。

Robo tests

あなたがinstrumentation testsを書いていないのならば、 Robo tests を選択することでシュミレートされたユーザーのアクションによってあなたのアプリをテストできます。Robo testsについての詳細はこちらをご覧ください。

結果を確認する

テストの実行結果を逐次気にしなくても全てのテスト結果はCloud Test Labに集められ、失敗したテストの詳細やログ、動画、スクリーンショットをオンラインで確認できます。より詳しい内容は Analyzing Cloud Test Lab Resultsをご覧ください。

また、AndroidStudioからテストを実行したのであれば、テスト結果をAndroidStudio内から確認できます。

SORACOMのAir SIMの帯域をRubyスクリプトから変更する

概要

ソラコムAir SIMの帯域変更をRubyスクリプトから試した。

SORACOM SDK for Rubyのインストール

$ gem install soracom

Clientの準備

require 'soracom'

client = Soracom::Client.new(email: 'YOUR_EMAIL_ADDRESS', password: 'YOUR_PASSWORD')

emailとpasswordは、それぞれ環境変数SORACOM_EMAILとSORACOM_PASSWORDを定義することでSDKが自動で読み込む。その場合は以下のようになる。

require 'soracom'

client = Soracom::Client.new

SIM一覧取得

require 'soracom'
require 'pp'

client = Soracom::Client.new(email: 'YOUR_EMAIL_ADDRESS', password: 'YOUR_PASSWORD')

# 管理しているSIM一覧を取得
sims = client.list_subscribers

pp sims

実行すると以下のような結果を得れる。

$ ruby soracom.rb
[{"imsi"=>"123456789",
  "msisdn"=>"0987654321",
  "ipAddress"=>"192.168.1.1",
  "apn"=>"soracom.io",
  "type"=>"s1.fast",
  "groupId"=>"12345-6789-abcd-efghijk",
  "createdAt"=>12345,
  "lastModifiedAt"=>6789abc,
  "expiredAt"=>nil,
  "terminationEnabled"=>false,
  "status"=>"active",
  "tags"=>{"name"=>"example"},
  "sessionStatus"=>
   {"lastUpdatedAt"=>123456,
    "imei"=>"123456789",
    "location"=>nil,
    "ueIpAddress"=>"192.168.1.1",
    "dnsServers"=>["192.168.1.1", "192.168.1.1"],
    "online"=>true},
  "speedClass"=>"s1.fast",
  "moduleType"=>"nano",
  "plan"=>0,
  "expiryTime"=>nil,
  "operatorId"=>"1234567",
  "createdTime"=> 12345,
  "lastModifiedTime"=> 6789abc}]

IMSI識別番号の取得

SIM個別に操作するためにIMSIを取得する。

require 'soracom'
require 'pp'

client = Soracom::Client.new(email: 'YOUR_EMAIL_ADDRESS', password: 'YOUR_PASSWORD')

# 管理しているSIM一覧を取得
sims = client.list_subscribers

# IMSI識別番号の取得
imsis = sims.map { |sim| sim['imsi'] }

pp imsis

実行するとIMSIの配列を得られる。

$ ruby soracom.rb
["123456789"]

SIMの通信帯域を制御

SORACOMには4つの速度クラスがあり、それらをユーザーコンソールから変更できる。今回はs1.fastからs1.minimumに変更する。

require 'soracom'

client = Soracom::Client.new(email: 'YOUR_EMAIL_ADDRESS', password: 'YOUR_PASSWORD')

# SIM一覧を取得
sims = client.list_subscribers

p sims.map { |sim| sim['speedClass'] }

# IMSI識別番号の取得
imsis = sims.map { |sim| sim['imsi'] }

client.update_subscriber_speed_class(imsis, 's1.minimum')

# SIMの情報を再取得
p client.list_subscribers.map { |sim| sim['speedClass'] }

実行すると速度クラスが変更され、帯域を制御できた。

$ ruby soracom.rb
["s1.fast"]
["s1.minimum"]

参考

Rubyでファイル名を置き換える

以下のようなファイルを

_hoge1.png
_hoge2.png
_hoge3.png
_hoge4.png
_hoge5.png

以下のようにリネームしたい

hoge1.png
hoge2.png
hoge3.png
hoge4.png
hoge5.png

Rubyで書くとこんな感じ

equire 'fileutils'

Dir.glob('*.png') { |filename|
    tmp = /_(.*).png/.match(filename)
    new_filename = tmp[1] + ".png"
    FileUtils.mv(filename, new_filename)
}

PhotonでOSX風Electronアプリを作成する

ElectronでOSX風のUIを簡単に作れるPhotonを使ってみる。

Eelectronをインストール

先にElectornをインストールしておく。

Photonのリポジトリをclone

$ git clone https://github.com/connors/photon.git

プロジェクト構成

Photonを使用してElectronアプリを作成するために必要なcssやfont、アプリ本体はdist以下に配置されている。tagged downloadsからはdist以下のみダウンロードできる。

photon
├── CNAME
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── _config.yml
├── dist
├── docs
├── fonts
├── package.json
└── sass

contributeしたい時はgruntを使う。

Photonのサンプルアプリを動かしてみる

$ npm start

もしくは

$ electron dist/template-app

f:id:horie1024:20151018210952p:plain

Components

色々なComponentsが用意されていて、組み合わせると簡単にOSX風UIを組み立てれる。