RaspberryPiでNFCを読み書きしたい(チャレンジ中)

(1)構成

NFCライブラリのインストール

Python2のライブラリをインストール

$ sudo sudo pip install nfcpy

Python3のライブラリもインストール

$ sudo sudo pip3 install nfcpy

サンプルコードをgit

$ git clone https://github.com/nfcpy/nfcpy.git

NFCリーダが繋がっていることを確認

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でないとダメっぽい。

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を書き込んである。

(2)構成

libnfc インストール

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

lib-usb インストール

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を検出できた!

MIFARE ultralightタグを読んでみる

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に書き出している
ここをファイル名にしておくと、ダンプされたバイナリが保存される。

東横INNカードを読んでみる

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の指定方法が分からないので未指定でやっているためエラーになっている。

FeliCaを読んでみる

PASMO

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
以下略

ANAカード

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
以下略

JALカード

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
以下略

MIFAIR TAG をダンプしてみる(MTAG216 868byte)

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まで続く)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-27 (月) 23:39:34