RaspberryPiでNFCを読み書きしたい(チャレンジ中)
Python2のライブラリをインストール
$ sudo sudo pip install nfcpy
Python3のライブラリもインストール
$ sudo sudo pip3 install nfcpy
$ git clone https://github.com/nfcpy/nfcpy.git
pi@pi3:~/nfcpy $ lsusb | grep Sony Bus 001 Device 006: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
pi@pi3:~ $ cd nfcpy/ pi@pi3:~/nfcpy $ sudo python3 examples/tagtool.py [nfc.clf] searching for reader on path usb [nfc.clf.rcs956] input/output error while waiting for ack [nfc.clf] no reader available on path usb [main] no contactless reader found on usb [main] no contactless reader available
残念!
RC-S380でないとダメっぽい。
成功!
pi@pi3:~ $ cd nfcpy/ pi@pi3:~/nfcpy $ sudo python3 examples/tagtool.py [nfc.clf] searching for reader on path usb [nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:012 ** waiting for a tag ** Type2Tag 'NXP NTAG216' ID=XXXXXXXXXXXXXX NDEF Capabilities: readable = yes writeable = yes capacity = 868 byte message = 3 byte NDEF Message: record 1 type = '' name = '' data = bytearray(b'')
NTAG216を読ませてみた。
pi@pi3:~ $ ./tagtool_rc-s380 [nfc.clf] searching for reader on path usb [nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:001:012 ** waiting for a tag ** Type2Tag 'NXP NTAG203' ID=046599BA1C2380 NDEF Capabilities: readable = yes writeable = yes capacity = 137 byte message = 16 byte NDEF Message: record 1 type = 'urn:nfc:wkt:U' name = '' data = b'\x01yahoo.co.jp'
NTAG203を読ませてみた。
こちらはwww.yahoo.co.jpにアクセスするためのURLを書き込んである。
sudo apt-get install libusb-dev sudo apt-get install libpcsclite-dev wget https://bintray.com/artifact/download/nfc-tools/sources/libnfc-1.7.1.tar.bz2 tar jxvf libnfc-1.7.1.tar.bz2 cd libnfc-1.7.1 ./configure make sudo make install
これはapt-getできるみたい。公式サイトも見るべし。
http://nfc-tools.org/index.php/Libnfc#Debian_.2F_Ubuntu
/etc/modprobe.d/raspi-blacklist.confに下記の2行を追加
blacklist pn533 blacklist nfc
wget http://hito.music.coocan.jp/pasori/libpafe-0.0.8.tar.gz tar zxvf libpafe-0.0.8.tar.gz cd libpafe-0.0.8 ./configure make sudo make install
sudo pasori_test
エラーが出るので、/etc/lod.so.confにinclude /usr/local/libを追加
pi@pi3:~ $ sudo pasori_test PaSoRi (RC-S330) firmware version 1.30
PaSoRiを検出できた!
pi@pi3:~ $ sudo nfc-mfultralight r /dev/null NFC device: Sony / ? opened Found MIFARE Ultralight card with UID: XXXXXXXXXXXXXX Reading 16 pages |................| Done, 16 of 16 pages readed. Writing data to file: /dev/null ... Done.
UIDはXXXXXXXXXXXXXXでマスクして記載した。ここには有効データが表示される。
ダンプしたデータの書き出し先の指定が必要なので、とりあえずnullに書き出している
ここをファイル名にしておくと、ダンプされたバイナリが保存される。
pi@pi3:~ $ sudo nfc-mfclassic r a /dev/null NFC reader: Sony / ? opened Found MIFARE Classic card: ISO/IEC 14443A (106 kbps) target: ATQA (SENS_RES): XX XX UID (NFCID1): XX XX XX XX SAK (SEL_RES): XX Guessing size: seems to be a 4096-byte card Reading out 256 blocks |nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed nfc_initiator_transceive_bytes: Mifare Authentication Failed ! Error: authentication failed for block 0xff
UIDはXXXXXXXXXXXXXXでマスクして記載した。ここには有効データが表示される。
ダンプしたデータの書き出し先の指定が必要なので、とりあえずnullに書き出している
ここをファイル名にしておくと、ダンプされたバイナリが保存される。
MIFAIR CLASSICはKEYが必要(0x00でいいらしいが)だが、KEYの指定方法が分からないので未指定でやっているためエラーになっている。
pi@pi3:~ $ sudo felica_dump # lpdump : Sat Feb 15 02:42:20 2020 # --- IDm info (FeliCa) --- # Manufacture Date = 20XX/XX/XX # SN = XXXXX # Manufacture Code = XXXX # Equip. Code = XXXX system num 2 # FELICA SYSTEM_CODE = XXXX # card IDm = XXXXXXXXXXXXXXXX # card PMm = XXXXXXXXXXXXXXXX # area num = XX # service num = XX # AREA #0 = 0000 (00000) # AREA #1 = 0001 (00000) # AREA #2 = 0003 (00000) # AREA #3 = 0020 (00000) # AREA #4 = 003F (00000) # AREA #5 = 0040 (00000) # AREA #6 = 005F (00000) # AREA #7 = 0060 (00000) # AREA #8 = 0073 (00000) # AREA #9 = 008C (00000) # 0001:0008 Ramdom Access R/W (PROTECTED) # 0001:000a Random Access Read only (PROTECTED) # 0002:0008 Ramdom Access R/W (PROTECTED) # 0002:000b Random Access Read only 0002:0000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # 0003:0008 Ramdom Access R/W (PROTECTED) # 0003:000a Random Access Read only (PROTECTED) # 0003:000c Cyclic Access R/W (PROTECTED) # 0003:000e Cyclic Access Read only (PROTECTED) # 0003:0010 Purse (Direct) (PROTECTED) # 0003:0012 Purse (Cashback/decrement) (PROTECTED) # 0003:0014 Purse (Decrement) (PROTECTED) # 0003:0016 Purse (Read Only) (PROTECTED) # 0020:0010 Purse (Direct) (PROTECTED) # 0020:0012 Purse (Cashback/decrement) (PROTECTED) # 0020:0016 Purse (Read Only) (PROTECTED) # 0021:0010 Purse (Direct) (PROTECTED) # 0021:0012 Purse (Cashback/decrement) (PROTECTED) # 0021:0016 Purse (Read Only) (PROTECTED) # 0022:0010 Purse (Direct) (PROTECTED) # 0022:0012 Purse (Cashback/decrement) (PROTECTED) # 0022:0016 Purse (Read Only) (PROTECTED) # 0023:0008 Ramdom Access R/W (PROTECTED) # 0023:000a Random Access Read only (PROTECTED) # 0024:000a Random Access Read only (PROTECTED) # 0024:000c Cyclic Access R/W (PROTECTED) # 0024:000f Cyclic Access Read only 0024:0000:XXXXXXXXXXXXXXXXXXXXXXXX000F4D00 0024:0001:XXXXXXXXXXXXXXXXXXXXXXXX000F4B00 以下略
pi@pi3:~ $ sudo felica_dump # lpdump : Sat Feb 15 02:46:52 2020 # --- IDm info (FeliCa) --- # Manufacture Date = 20XX/XX/XX # SN = XXXX # Manufacture Code = XXXX # Equip. Code = XXXX system num 2 # FELICA SYSTEM_CODE = 8082 # card IDm = XXXXXXXXXXXXXXXX # card PMm = XXXXXXXXXXXXXXXX # area num = 5 # service num = 4 # AREA #0 = 0000 (00000) # AREA #1 = 000C (00000) # AREA #2 = 000C (00001) # AREA #3 = 0010 (00000) # AREA #4 = 0010 (00001) # 000C:0008 Ramdom Access R/W (PROTECTED) # 000C:000b Random Access Read only 000C:0000:00000000000000000000000000000000 000C:0001:00000000000000000000000000000000 000C:0002:00000000000000000000000000000000 000C:0003:00000000000000000000000000000000 000C:0004:00000000000000000000000000000000 # 0010:0008 Ramdom Access R/W (PROTECTED) # 0010:000b Random Access Read only 0010:0000:00000000000000000000000000000000 0010:0001:00000000000000000000000000000000 0010:0002:00000000000000000000000000000000 0010:0003:00000000000000000000000000000000 0010:0004:00000000000000000000000000000000 以下略
pi@pi3:~ $ sudo felica_dump # lpdump : Sat Feb 15 02:47:49 2020 # --- IDm info (FeliCa) --- # Manufacture Date = 20XX/XX/XX # SN = XXX # Manufacture Code = XXXX # Equip. Code = XXXX system num 2 # FELICA SYSTEM_CODE = 816E # card IDm = XXXXXXXXXXXXXXXX # card PMm = XXXXXXXXXXXXXXXX # area num = 1 # service num = 0 # AREA #0 = 0000 (00000) # FELICA SYSTEM_CODE = FE00 # card IDm = XXXXXXXXXXXXXXXX # card PMm = XXXXXXXXXXXXXXXX # area num = 3 # service num = 10 # AREA #0 = 0000 (00000) # AREA #1 = 00BD (00000) # AREA #2 = 00BD (00001) # 00BD:0008 Ramdom Access R/W (PROTECTED) # 00BD:000b Random Access Read only 以下略
sudo nfc-mfultralight r NTAG216.dmp NFC device: Sony / ? opened Found MIFARE Ultralight card with UID: XXXXXXXXXXXXXX Reading 16 pages |................| Done, 16 of 16 pages readed. Writing data to file: NTAG216.dmp ... Done.
hexeditで見てみた
<---UID 4byte 32bit----> <SN0> <SN1> <SN2> <BCC0> <SN3> <SN4> <SN5> <SN6> 00000000 XX XX XX XX XX XX XX XX XX XX 00 00 XX XX XX XX ................ <BCC1><Inter><LCK0><LCK1> <OPT0><OPT1> <OPT2><OPT3> 00000010 XX XX XX XX XX XX 00 00 00 00 00 00 00 00 00 00 ................ <DAT0><DAT1> <DAT2><DAT3> <DAT4><DAT5> <DAT6><DAT7> 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ <DAT8><DAT9> <DAT10>..... 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 以下略(DAT47まで続く)