问题标签 [pyscard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1173 浏览

python - USB - 主机和设备之间是否有初始握手?

我正在使用Wireshark智能卡读卡器捕获 USB 流量。当我使用 连接到阅读器时PyScard,在我仅通过建立连接发送任何 APDU 之前,使用批量操作来回发送一些数据包。

我在这里读到USB 设备和主机之间有一个初始握手,我想知道这是否是我在嗅探时看到的。

使用wireshark,我得到以下信息:

  1. 批量输出(主机到设备):

第一个数据包

  1. 批量输出(设备到主机):

第二包

  1. 批量输入(主机到设备):

第三

  1. 批量输入(设备到主机):

第四包

这四个数据包发送了 2-3 次,然后我可以使用 PyScard 嗅探我发送的消息。

我的目标是仅使用 USB 通信来重现阅读器和主机之间的通信。所以:

  1. USB 通信中是否存在初始握手?

  2. 这就是我要捕捉的吗?

  3. 如何重现这种 USB 通信?

谢谢 <3


编辑 2018 年 3 月 14 日 - 大卫格雷森回答后的其他信息

我在这里捕获的不是“获取设备描述符”等的一部分。当我尝试打印设备的详细信息并且 Wireshark 识别并标记数据包时会发生这种情况。

我知道奇怪的操作,但这是我从wireshark 得到的。我一直在做的解释是它们是请求-响应对:主机使用批量输出端点发送一些东西,然后在准备好这样做时要求通过使用批量输入端点来读取答案。我完全不知道,这就是它对我的看法。

(截图没问题,它们看起来很像,但它们不一样)

0 投票
1 回答
1787 浏览

python-3.x - Pyinstaller 在 Windows 上使用 pyscard 失败

我正在尝试在使用 pyscard 的简单脚本上使用 pyinstaller。

这在 Ubuntu 上没问题,但在 Windows7 和 Windows10 机器上失败。两个版本的windows故障都是一样的,下面是windows7的屏幕输出:

注意: pyinstaller 的可选参数没有任何区别,我尝试了使用和不使用 --onefile、--hidden-import 和 --win-private-assemblies 的 8 种组合。在 ubuntu 上,只需使用脚本名称和 --onefile 即可调用 pyinstaller。

注意 2:我在 Windows7 机器上遇到了与 Python3.6-32 相同的问题。我卸载了我可以在机器上找到的所有 python 东西,并重新安装了 Python3.6 x86-64 和匹配的 pyscard(使用来自https 的 dist\pyscard-1.9.6.win-amd64-py3.6.msi: //ci.appveyor.com/project/LudovicRousseau/pyscard )

任何有助于理解或解决问题的帮助将不胜感激,我什至不知道问题是否与我的设置或 Pyinstaller 或 Pyscard 相关:-S

0 投票
0 回答
557 浏览

python - Yubikey 5 NFC 使用 ACR122U 在 Python 中生成 OTP

对于我目前正在进行的项目,我需要能够读取新的 Yubikey 5 NFC 密钥并生成 Yubico OTP。

早些时候,我通过在 Python 中使用 Pyscard 库并执行以下 2 个 APDU 命令,设法让 Yubikey NEO 工作:

这仍然适用于 Yubikey NEO,它为我提供了 Yubikey 的公共 ID 和一次性密码。

但是对于 Yubikey 5,这似乎不起作用。谁能指出我正确的方向?

我在 Windows/Mac 上通过 USB 使用带有 ACR122u NFC/RFID 阅读器的 Python。

编辑:

使用MacOS 上的 opensc-tool,我已将 Yubikey 5 NFC 识别为不同于个人身份验证卡 (Yubikey NEO)的OpenPGP 卡 v2.1 。https://g10code.com/docs/openpgp-card-2.1.pdf上的指南并没有帮助我进一步生成一次性密码。

0 投票
1 回答
44 浏览

python - 为什么 os.fork() 之后 pyscard 无法连接到 pcscd 服务?

我在 MacOS 10.14.3 上,如果这有什么不同的话。

当我运行此代码时:

我得到这个结果:

为什么在我 fork 进程并且我处于子进程后 pyscard 无法连接到 pcscd 服务?以及如何让 pyscard 在子进程中正确连接?

0 投票
1 回答
580 浏览

python-3.x - 如何在检测到智能卡后重置此代码而不终止它,从而继续侦听其他智能卡?

我有一个代码正在运行并成功打印 ATR、UID 和状态,但是,程序在检测并打印 UID 后结束。如何在检测到并等待移除和插入不同的卡(或同一张卡)后重置我的代码

我尝试过使用 while 循环,但这会导致程序多次打印 ATR、UID 和状态,并且当卡被移除时,程序会因错误而终止。

它尝试过的修复(这会继续打印,当我取出卡时它会终止(已解决)):

问题是我不知道如何创建一个打印一次的循环。打印 UID 后,它等待卡被移除并输入另一个卡,然后循环重置。

编辑:我设法使代码重置,但是,我不知道如何让程序打印一次而不是继续打印。有什么建议么?

我希望代码在智能卡出现后打印一次,然后当智能卡被移除时,重置并再次收听智能卡。

0 投票
0 回答
123 浏览

python - 禁用自动轮询时如何通过 NFC 阅读器 ACR122u 发出请求

即使禁用自动轮询,是否有解决方案可以向读卡器发送直接命令以搜索可用卡?

我想通过 ACR122U NFC 阅读器从 RFID 芯片读取数据。我尝试了 nfcpy 库,但每次阅读标签时,脚本都会中断。所以我尝试了 pyscard 库,它可以在标签上读写,但它一直在轮询,LED 是红色的,直到标签足够接近可以读取,然后它变成绿色。在 nfcpy 库中,led 一直处于关闭状态。我可以在 pyscard 中发送命令以禁用自动轮询等导致问题,但知道即使我向阅读器发送直接命令以读取所有附近的卡片,阅读器也找不到标签。

0 投票
1 回答
3651 浏览

python - 无法通过 Python 用 NFC/RFID 读卡器读卡

我买了一个 NFC 读卡器 (ACS / ACR122U),我通过 USB 端口插入我的树莓派 3;我已经安装了 swig、pcsc-tools、pcscd、libpcsclite... pcscd 服务由 systemctl 启动并绑定到 pcscd.socket。启动时我可以看到读卡器,启动时nfc-scan-device也可以读取读卡器提供的卡nfc-list 然后我尝试使用 python3 和 pyscard 读取标签 ID,但它不起作用。我可以看到阅读器并启动连接而没有任何错误消息,但无法读取 tagID。

sudo nfc-list返回:

NFC读卡器因此可以访问,我什至可以获得卡片的标签ID

然后我尝试在 python 上使用它我在那里找到了一些信息: https://pyscard.sourceforge.io/user-guide.html https://pyscard.sourceforge.io/epydoc/smartcard-module.html

我首先在 pipenv 环境中尝试它,但没有奏效。然后我删除了 pipenv 以确保它不在关键路径上......

第一次测试

我尝试了一个可以在 pyscard doc 和大多数教程上找到的基本脚本......我们称之为nfcReader-1.py

找到了读卡器,但我无法读取卡。transmit() 方法返回 [0x63,x0x00] ([99,00]) 这意味着发生了一些奇怪的事情当我在 python 命令行中键入每个命令时它都不起作用

第二次测试

我也尝试另一种方式。我在 pyscard 文档中找到了第二种方法,但结果完全一样:

反应没有什么不同:

我使用的命令是 [0xFF,0xCA,0x00,0x00,0x00] 似乎是获取 tagid 的命令。ACS 阅读器文档 ( https://www.acs.com.hk/en/download-manual/419/API-ACR122U-2.04.pdf ) 确认这是正确的顺序。 ACS tagid 序列描述

至少,我尝试使用sudo启动我的 python 脚本以防万一。我将套接字文件夹(/var/run/pcscd/pcscd.comm)的权限更改为 777 ...以防万一

有人知道我可以如何解决这个奇怪的问题吗?谢谢你的帮助。

0 投票
0 回答
279 浏览

python - 我无法理解我的症状。Python 正在使用 pyscard

我正在使用 Python 编写一个程序,该程序使用 tkinter 识别 Mifare Card 并将值写入卡。

我目前的程序很少,但效果很好。但是,在更新卡上的二进制块时,它会间歇性地失败。失败后,所有二进制块都更改为 0 或 255。

我无法理解这种现象。

读卡器出现故障,但卡已更换。

我想消除症状的原因和症状。帮助。

附上源码。

  • 失败时

连接到 ACS ACR122U 00 00

FF CA 00 00 04 - uid 获取

DB 96 AE 52 90 00

FF 82 00 00 06 05 00 00 00 00 00 - 加载密钥

[] 90 00 - 成功加载密钥

FF 86 00 00 05 01 00 00 60 00 - 认证

[] 90 00 - 认证成功

FF B0 00 01 10 - 数字 1 二进制块调用

00 00 00 00 40 00 00 00 AA 55 00 00 00 40 00 00 90 00 - 获取数字 1 二进制块

---------------------- 更新二进制块之前------------ --

二进制块前 >> [0, 0, 0, 0, 64, 0, 0, 0, 170, 85, 0, 0, 0, 64, 0, 0]

在 send_byte >> [0, 0, 0, 0, 64, 0, 0, 0, 170, 85, 0, 0, 0, 64, 0, 0] 之前


FF D6 00 01 10 00 00 00 00 40 00 00 00 AA 55 00 00 00 40 00 00 - 数字 1 二进制块更新

[] 63 00 - 失败

----------------------更新失败二进制块---------- --

发送字节>>[0, 0, 0, 0, 64, 0, 0, 0, 170, 85, 0, 0, 0, 64, 0, 0]


FF 00 40 00 04 01 00 01 01 蜂鸣器控制

[] 90 00 - 蜂鸣器控制成功

FF 00 40 00 04 01 00 01 01 蜂鸣器控制

[] 90 00 - 蜂鸣器控制成功

FF B0 00 01 10 - 数字 1 二进制块调用

[] 63 00 - 失败

从 ACS ACR122U 断开 00 00

  • 失败后

连接到 ACS ACR122U 00 00

FF CA 00 00 04 - uid 获取

DB 96 AE 52 90 00

FF 82 00 00 06 05 00 00 00 00 00 - 加载密钥

[] 90 00 - 成功加载密钥

FF 86 00 00 05 01 00 00 60 00 - 认证

[] 90 00 - 认证成功

FF B0 00 01 10 - 数字 1 二进制块调用

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 - 获取数字 1 二进制块

更新块后预期的结果应该没有变化,但会间歇性地更改为 0 或 255。

0 投票
1 回答
822 浏览

python-3.5 - python 3.5 在树莓派 3 中安装 pyscard

我尝试在 python 3.5 中安装 pyscard,但总是出错

错误安装pyscard

任何人都可以和我在一起吗?

0 投票
2 回答
2997 浏览

smartcard - 在 python 3.7 中安装 Pyscard

如何pyscard在 python 3.7 上安装?

python 3.7中是否还有其他用于智能卡读卡器的模块?

之后的错误:

pip install pyscard