ようこそゲストさん

((((-ω-))))) ねこー

ネットの無い国には、わたし、住めないかも。
彼らが最初共産主義者を攻撃したとき

2009/12/01(火) 師走

programming

NFが終わって

今年は紅葉が長いんですが、見に行く機会がッ

学祭ことNFは無事終わりました。三日目の夕方*1に雨が降ってしょんぼりしたぐらいですか。

*1 : 所謂ニコニコダンステラミックスの時間

BonCasServerをperlに移植した

スマートカードリーダLAN共有システムBonCasLinkのサーバBonCasServerをLinux上で走らせたかったので、perlで書き直してみました。BonCasLinkはソースが公開されてるのでプロトコルがさくっと分かって感謝です。
BonCasLinkがやっているコトは簡単にはSCardTransmitを遠隔で叩くことだけなので、こいつの入出力*2をperlで書ければ良いことになる。

で、わたしの環境はDebian lennyなので、libpcsc-perlを入れる*3と、Chipcard::PCSCChipcard::PCSC::Cardという二つのperl moduleが使用可能になります。

んで、さくっと書いてみたのがbcs-perl.pl。recv一発呼びで大丈夫なんかとか思うことはあるけどLAN環境下で何か動いてるように見える*4ので気にしない!

設定項目は
  • 読みに行くカードリーダ
  • listenするポート
  • bindするIP
の三本で、読みに行くカードリーダはスクリプトにlistという引数を付けてやると認識してるリーダ一覧を吐くのでそこからコピペしてやります。
$ ./bcs-perl.pl list
>>List of PC/SC card reader
SCM SCR 3310 NTTCom 00 00
>>EOL
$
listenするポートは特に変えなくてもいい気がします。bindするIPはLAN側のIPにした方が良いかも。
ちなみにカードリーダはぐぐるとLinuxでも動くと書いてあったNTT-MEのSCR3310-NTTComを買いました。bcs-perl.plはリーダとしてSCR3310-NTTComを設定してる筈*5

設定して起動すると、こんな感じに出て待機状態になれば良いんじゃないかなぁ。
$ ./bcs-perl.pl
>>Reader:SCM SCR 3310 NTTCom 00 00
>>Card Status:[Card Present][Powered][Ready for PTS]
>>Card ID: xx-xx-xx-xx-xx-xx
>>Begin Listening(0.0.0.0:6900).....
あとは、クライアントBonCasStubが繋ぎに来たり接続切れたりしたら随時表示をします。動作確認としてPT2刺したマシンと白繋いだマシンから同時にbcs-perl.pl走ったマシンへ繋いでちゃんと二台のマシンで視聴出来たので出来たつもり。

こんな所ですかね。そんな複雑なコトしてないのでpcsc_scanでB-CASが見えてれば動くはずですが、動かなかったらご愁傷様です。間違っても動かないからとBonCasLinkの作者*6に問い合わせないでください。

*2 : zipに添付されてるソースを読むと送受信共にまず先頭1バイトにデータ長が付いている。

*3 : aptitude search pcscで出てきたリストからpcscdとかpcsc-tools等を適当にinstallし、pcsc_scan叩いてB-CASが見えればおk。lennyだとpcsc_scanが/usr/share/pcsc/smartcard_list.txtを更新しろと言うので仰るとおりに更新してやる。

*4 : テストコードに近いので動けばオッケーみたいな気持ち。MSG_WAITALL付けてるから大丈夫だと思うけど。

*5 : リーダが複数台有るなど環境によって変わったりするんだろうかこの文字列。

*6 : 拡張ツール中の人氏。


名前:  非公開コメント   

  • TB-URL(確認後に公開)  http://mono.kmc.gr.jp/~walkure/081/tb/