PCSC
Card Daemon
Debug
sudo ./pcscd -a -f
zum starten und traffic beobachten:
Loading lib v2.06
99999999 APDU: FF CA 00 00 00
00001642 SW: 04 89 51 C2 FE 20 80 90 00
APDU sind die Befehle an die Tags, SW sind die Antworten.
Perl
Debian liefert PerlBindings fuer pcsc mit. Hier ein Beispielskript zum lesen von UIDs
#!/usr/bin/perl
use Chipcard::PCSC;
use Chipcard::PCSC::Card;
use warnings;
use strict;
my $hContext;
my @ReadersList;
my $hCard;
my @StatusResult;
my $tmpVal;
my $SendData;
my $RecvData;
$hContext = new Chipcard::PCSC();
die ("Can't create the pcsc object: $Chipcard::PCSC::errno\n") unless (defined $hContext);
@ReadersList = $hContext->ListReaders ();
die ("Can't get readers' list: $Chipcard::PCSC::errno\n") unless (defined($ReadersList[0]));
$, = "\n ";
$" = "\n ";
$hCard = new Chipcard::PCSC::Card ($hContext, $ReadersList[0]);
die ("Can't connect to the reader '$ReadersList[0]': $Chipcard::PCSC::errno\n") unless (defined($hCard));
@StatusResult = $hCard->Status ();
die ("Can't get card status: $Chipcard::PCSC::errno\n") unless (defined ($StatusResult[0]));
printf "ATR = ";
foreach $tmpVal (@{$StatusResult[3]}) {
printf ("%02X ", $tmpVal);
} print "\n";
$SendData = [0xFF, 0xCA, 0x00, 0x00, 0x00];
$RecvData = $hCard->Transmit($SendData);
die ("Can't transmit data: $Chipcard::PCSC::errno") unless (defined ($RecvData));
print "UID = ";
foreach $tmpVal (@{$RecvData}) {
printf ("%02X ", $tmpVal);
} print "\n";
$hCard->Disconnect($Chipcard::PCSC::SCARD_LEAVE_CARD);
undef $hCard;
$hContext = undef;
Siehe auch