WindowsでOpenSCを使う（4. opensc-tool.exeでできることって？①）

# はじめに
opensc-tool.exeを使用するとどんなことができるかを
オプションの意味とともに調べてみました。
# 使用するツール
- コマンドプロンプト
- opensc-tool.exe（[WindowsでOpenSCを使う（1.準備編）](https://qiita.com/erik_tnk/items/7d40b02be3bb13f2c3af)参照）
- カードリーダー：PaSoRi RC-S380
- ICカード=Felica

# OpenSCオプション
## 単体で実行できるオプション
### --info, -i
バージョンや有効なコンポーネントなどのOpenSCに関する情報を出力します。

実際に実行してみると↓の画像のような情報が出力されます。
--infoでも、-iでも同じ情報が出力されますね。
![opensc_info2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/33400388-d255-af72-db5d-f00746d77006.png)
![opensc_info.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/377ba92d-8d02-733f-06e3-764f23966ed5.png)
`OpenSC 0.19.0[Microsoft 1800]`がバージョン、
`Enabled features:pcsc openssl zlib`が有効なコンポーネントのようです。

現在使用しているOpenSCのバージョンは`OpenSC 0.19.0`、
有効なコンポーネントは`pcsc`と`openssl`と`zlib`の三種ということになるでしょうか。
`[Microsoft 1800]`部分は実行環境かな？Windows以外で実行してみると分かるかもしれませんね。
### --atr, -a
こちらのオプションは
[WindowsでOpenSCを使う（2.カードのIDm確認編）](https://qiita.com/erik_tnk/items/a8e36323a44bab92640d)で解説しています。
### --name, -n
カードとドライバの名前を出力します。

まず、ICカードを載せていない状態で実行してみます。
![opensc_name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/63f554ca-1d51-4428-f45d-efa6448c96f0.png)
カードリーダーの情報、`Sony FeliCa Port/PaSoRi 3.0.0`と`Card not present`と
カードが載っていない旨が出力されます。

次に、持っているFelicaカードを載せて同じコマンドを実行してみます。
![opensc_name2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/b06c5b5e-80dd-3ac4-f7b6-9c76634aa2b7.png)
カードリーダーは上記と同じですが、カード情報として`Unsupported card`が表示されました。なにこれ。

[ここ](https://github.com/OpenSC/OpenSC/issues/1431)で同じような問題にあたっている人がいましたが、
どうもICカードでも、OpenSCでサポートされていないものがあるようです。
Felicaだから大丈夫だと思ったのにな。

ここはもう少しちゃんと調べたいですね。
### --serial
カードのシリアル番号（通常はICCSN）を16進バイト形式で出力します。
![opensc_serial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/6d766432-2031-ec21-9af0-c12675223267.png)
これも-nの時と同じでサポートされていないカードだからかダメみたいです。
### --send-apdu apdu, -s apdu
任意のAPDUコマンドをカードに送ります。
これについては
[WindowsでOpenSCを使う（3.MIFARE Classicブロックデータ読み出し編①）](https://qiita.com/drafts/9eb14d689870004596bb)を参照してください。
### --list-files, -f
カードに保存されているすべてのファイルを再帰的にリストします。
![opensc_f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/969c643e-496a-3ac2-e83f-5cd54f05d104.png)
カードがサポートされてないか、カードにファイルが保存されていないのか...
### --list-readers, -l
設定されたリーダーをすべてリストします。
![opensc_l.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/1b503bc1-ec4d-dfc3-bf8c-8cae58dc3c7c.png)
うん、カードリーダーの情報はちゃんと取得できますね。
### --list-drivers, -D
インストール済みのカードドライバーをすべてリストします。
![opensc_list_drivers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/ee64d7a1-0afa-00b7-e369-d27fdfc8a30e.png)
![opensc_list_drivers2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/48eb24f4-406f-1408-3626-b71fb1679a9d.png)
![opensc_list_drivers3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/287f654d-9886-236a-ed2d-aefd9be94129.png)
いっぱいある。

## ほかのオプションと組み合わせて実行するオプション
### --reader num, -r num
カードリーダー番号を指定してコマンドを実行する。デフォルトのカードリーダー番号は0。
カードリーダー番号は`--list-readers, -l`
を行った時に確認できます。

![opensc_r_num.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/80d08f4b-4699-3641-7b54-4903d5f13029.png)

`-r カードリーダー番号 -カードリーダーで実行したいオプション`という形で実行します。
### --card-driver driver, -c driver
指定されたカードドライバーを使用します。デフォルトは自動検出されます。
カードドライバーは`--list-drivers, -D`で確認できます。
![opensc_c_driver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/600e91d7-14fb-cd9b-d7ce-3b49822f8f69.png)

`--card-driver カードドライバー名 -カードリーダーで実行したいオプション`という形で実行します。
### --wait, -w
カードが挿入されるのを待ちます。
![opensc_w.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/7c441529-5f7f-510a-b197-a3ec41805e9a.png)

カードを載せていない状態で`opensc-tool.exe -w -n`を実行すると、
`Waiting for a card to be inserted...`と出力され、
カードを載せると`Unsupported card`と出力されました。

`-w`を使用すると、カードが載せられるまで`-n`の実行を待ってくれるんですね。
### --verbose, -v
opensc-toolをより詳細にします。
 openscライブラリでデバッグ出力を有効にするには、このフラグを数回指定します。
![opensc_v.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409907/a857be52-13a1-3791-2a78-7491e6246568.png)
`-v`と`-n`を組み合わせて実行しました。
`Using card driver Defalt driver for unknown cards.`と
`-n`単体で行った時より、詳しい説明が出ました。
# 次に調べること
うまく情報が取得できなかった、`-n`、`--serial`、`--list-files`について詳しく調べます。
おそらく、`--card-driver`オプションを使用して、
デフォルトのドライバーじゃなくて違うドライバーを選択すればちゃんと情報取得できるのではないかな。
# 参考サイト
[opensc-tool(1) - Linux man page](https://linux.die.net/man/1/opensc-tool)
[Ubuntu Manuals opensc-tool.1](http://manpages.ubuntu.com/manpages/bionic/man1/opensc-tool.1.html#name)
# 関連ページ
[WindowsでOpenSCを使う（1.準備編）](https://qiita.com/erik_tnk/items/7d40b02be3bb13f2c3af)
[WindowsでOpenSCを使う（2.カードのIDm確認編）](https://qiita.com/erik_tnk/items/a8e36323a44bab92640d)
[WindowsでOpenSCを使う（3.MIFARE Classicブロックデータ読み出し編①）](https://qiita.com/erik_t/items/9eb14d689870004596bb)
[WindowsでOpenSCを使う（3.MIFARE Classicブロックデータ読み出し編②）](https://qiita.com/erik_t/items/835f761792265206ac3f)
[WindowsでOpenSCを使う（4. opensc-tool.exeでできることって？②）](https://qiita.com/erik_t/items/451d68fe85a1e756b270)