首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Libnfc如何读取NFC卡内容?

Libnfc如何读取NFC卡内容?
EN

Stack Overflow用户
提问于 2014-11-12 06:33:30
回答 2查看 2.8K关注 0票数 2

我正在尝试使用ACR122读卡器简单地读取SRx 14443-2B STISO卡内容。

我已经使用Libnfc和适当的阅读器驱动程序设置了我的环境。

现在,我已经成功地编写了一段代码,只需读取卡的UID并将其打印出来。没有任何文档,我完全不知道从哪里开始阅读卡片内容。有什么线索或代码片段吗?

这就是我所做的:

代码语言:javascript
复制
    // To compile this simple example:
// $ gcc -o quick_start_example1 quick_start_example1.c -lnfc
// ./quick_start_example1

#include <stdlib.h>
#include <nfc/nfc.h>

void print_nfc_target(const nfc_target *pnt, bool verbose)
{
  char *s;
  str_nfc_target(&s, pnt, verbose);
  printf("%s", s);
  nfc_free(s);
}

int main(int argc, const char *argv[])
{
    nfc_device *pnd;
    nfc_target nt;

    // Allocate only a pointer to nfc_context
    nfc_context *context;

    // Initialize libnfc and set the nfc_context
    nfc_init(&context);
    if (context == NULL) {
      printf("Unable to init libnfc (malloc)\n");
      exit(EXIT_FAILURE);
    }

    // Display libnfc version
    const char *acLibnfcVersion = nfc_version();
    (void)argc;
    printf("%s uses libnfc %s\n", argv[0], acLibnfcVersion);

    // Open, using the first available NFC device
    pnd = nfc_open(context, NULL);

    if (pnd == NULL) {
      printf("ERROR: %s\n", "Unable to open NFC device.");
      exit(EXIT_FAILURE);
    }
    // Set opened NFC device to initiator mode
    if (nfc_initiator_init(pnd) < 0) {
      nfc_perror(pnd, "nfc_initiator_init");
      exit(EXIT_FAILURE);
    }

    printf("NFC reader: %s opened\n", nfc_device_get_name(pnd));

    nfc_target ant[1];
    nfc_modulation nm;
    nm.nmt = NMT_ISO14443B;
    nm.nbr = NBR_106;

    nfc_initiator_list_passive_targets(pnd,nm,ant,1);
    printf("%s\n",nfc_strerror(pnd)); // print Success

    nfc_target ant2[1];
    nfc_modulation nm2;
    nm2.nmt = NMT_ISO14443B2SR;
    nm2.nbr = NBR_106;

    int res = 0;
    int n = 0;
    res = nfc_initiator_list_passive_targets(pnd, nm2, ant2, 1);
    printf("%s\n",nfc_strerror(pnd)); // print Success

    // printf("Cart identifier: %s\n", nt.nti.nsi.abtUID);
    for (n = 0; n < res; n++) {
      print_nfc_target(&ant2[n], true);
      printf("\n");
    }

    // Close NFC device
    nfc_close(pnd);
    // Release the context
    nfc_exit(context);
    exit(EXIT_SUCCESS);
}

PS:由于一个已知的bug ( http://www.libnfc.org/community/topic/1044/problem-with-init-of-iso14443b/ ),我列出了2倍的目标

EN

回答 2

Stack Overflow用户

发布于 2019-08-11 01:38:24

我写了一个小帮手程序,用LibNFC读取ST SRx标签:

https://github.com/Depau/nfc-st-srx/

它仍然需要一些更改才能写入它们,但它确实成功地读取了它们。

票数 0
EN

Stack Overflow用户

发布于 2014-12-22 16:13:52

首先(我就是这样开始的),获取EMV book 3并读取卡交易的命令,包括命令APDU及其写入方式、响应APDU及其处理方式、响应码、状态字节码等。然后把1-5本书和上面的书一起拿来。还可以获得Implementing Electronic Card Payment Systems by Cristian Radu这本书,它将指导您完成学习如何开发EMV卡应用程序所需的每个步骤。希望这能有所帮助。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26875875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档