Код выполняется. без ошибок, и я вижу выходные сообщения типа «тег активирован», но устройство чтения по-прежнему не распознает эмулируемый тег, как это происходит с исходной картой. Кроме того, я не могу правильно установить сервисный код таким образом, чтобы обеспечить правильное чтение и запись данных на основе блоков, полученных с исходной карты.
Вот что я сделал. далеко:
[*]Я могу успешно считать данные с карты, включая сервисные коды и данные блокировки, с помощью nfcpy.
[*]На основании данных I снято, я настроил среду эмуляции с помощью nfcpy на USB-считывателе NFC (Sony RC-S380).
[*]Я попробовал добавление служб с помощью tag.add_service() и определение функций ndef_read и ndef_write для предоставления данных на уровне блоков.
< /ol>
Я могу успешно считать данные с карты, включая сервисные коды и данные блоков, используя nfcpy. На основе собранных данных я настроил среду эмуляции с помощью nfcpy на USB-считывателе NFC (Sony RC-S380). Я пробовал добавлять службы с помощью tag.add_service() и определять функции ndef_read и ndef_write для предоставления данных на уровне блоков.
Вот пример моего кода:
Код: Выделить всё
import nfc
import struct
ndef_data_area = bytearray(64 * 16)
ndef_data_area[0] = 0x10 # NDEF mapping version '1.0'
ndef_data_area[1] = 12 # Number of blocks that may be read at once
ndef_data_area[2] = 8 # Number of blocks that may be written at once
ndef_data_area[4] = 63 # Number of blocks available for NDEF data
ndef_data_area[10] = 1 # NDEF read and write operations are allowed
ndef_data_area[14:16] = struct.pack('>H', sum(ndef_data_area[0:14])) # Checksum
def ndef_read(block_number, rb, re):
if block_number < len(ndef_data_area) / 16:
first, last = block_number * 16, (block_number + 1) * 16
return ndef_data_area[first:last]
def ndef_write(block_number, block_data, wb, we):
global ndef_data_area
if block_number < len(ndef_data_area) / 16:
first, last = block_number * 16, (block_number + 1) * 16
ndef_data_area[first:last] = block_data
return True
def on_startup(target):
idm, pmm, sys = '03FEFFE011223344', '01E0000000FFFF00', '12FC'
target.sensf_res = bytearray.fromhex('01' + idm + pmm + sys)
target.brty = "212F"
return target
def on_connect(tag):
print("tag activated")
tag.add_service(0x1A88, ndef_read, ndef_write)
tag.add_service(0x000B, ndef_read, lambda: False)
return True
with nfc.ContactlessFrontend('usb:054c:06c1') as clf:
while clf.connect(card={'on-startup': on_startup, 'on-connect': on_connect}):
print("tag released")
Как правильно эмулировать тег NFC с определенными сервисными кодами и блокировать данные, чтобы читатель интерпретировал их точно так же, как оригинал? карта? Есть ли что-то особенное для nfcpy, чего мне не хватает при настройке сервисных кодов или данных блока, что может повлиять на эмуляцию? Существуют ли лучшие библиотеки или методы для эмуляции тегов FeliCa, особенно если nfcpy имеет ограничения в обработке служебного кода?
Будем очень признательны за любые советы и предложения! Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/791 ... a-in-pytho
Мобильная версия