nfc-list使用教程

nfc-list 是 Kali Linux 中基于 **libnfc 库(开源 NFC 开发框架)**的基础 NFC/RFID 设备检测工具,核心功能是扫描并列出当前连接的 NFC 读卡器设备,以及贴近读卡器的 NFC 卡片(或标签)的详细信息,包括卡片类型、UID(唯一标识符)、协议标准、数据传输速率等。该工具是 NFC 安全测试与开发的"入门级检测工具",主要用于快速确认硬件连接状态、识别卡片基础属性,为后续使用 mfoc、mfcuk、mfterm 等工具提供前置信息支持(需对检测的卡片/设备拥有合法所有权或授权)。

其核心特性与适用范围如下:

  • 多设备/多卡片兼容:支持主流 USB 接口 NFC 读卡器(如 ACR122U、PN532、SCL3711),可识别 ISO14443A/B、Felica、NFC Barcode 等多种协议标准的 NFC 卡片/标签,覆盖绝大多数民用 NFC 设备类型。
  • 精细化扫描控制:通过"协议类型位域(bitfield)"参数(-t X),可指定仅扫描特定协议的卡片(如仅扫描 ISO14443A 协议的 MIFARE Classic 卡片),避免无关卡片干扰,提升扫描效率。
  • 详细信息输出:默认输出读卡器型号、卡片 UID、卡片类型(如 MIFARE Classic 1K)、协议版本、数据速率等关键信息;启用 verbose 模式(-v)后,可显示更底层的通信参数(如 ATQA、SAK 响应值),辅助卡片逆向分析。
  • 轻量无依赖:作为 libnfc 库的基础工具,体积小、启动快,无需复杂配置,可直接在终端执行,适合快速排查硬件连接问题(如读卡器未识别、卡片无响应等)。

适用场景:

  • 确认 NFC 读卡器是否被 Kali 系统正常识别(排除硬件驱动或连接问题);
  • 快速识别未知 NFC 卡片的协议类型与基础属性(如判断是 MIFARE Classic 还是 Ultralight 卡片);
  • 批量检测卡片 UID(如门禁卡、公交卡的唯一标识);
  • 作为 NFC 工具链的前置检测步骤(如执行 mfoc 前确认卡片类型是否支持)。

二、命令参数解析(表格形式)

1. 核心选项参数

参数 英文说明 中文解析 使用示例
-v verbose display 启用详细输出模式(verbose mode):除默认信息外,额外显示卡片的底层通信参数(如 ATQA 响应值、SAK 状态值、最大帧长度)、读卡器的固件版本、通信协议细节等,用于深度硬件/卡片分析。 nfc-list -v(详细显示读卡器与卡片信息)
-t X poll only for types according to bitfield X(具体 bitfield 含义见下文) 指定仅扫描特定协议类型的卡片,X 为"协议类型位域"的十进制数值(不同协议对应不同 bit 位,多个协议可通过"位或运算"合并数值);默认 X=1023(扫描所有协议类型)。 nfc-list -t 1(仅扫描 ISO14443A 协议卡片);nfc-list -t 9(扫描 ISO14443A + ISO14443B 协议卡片)

2. 协议类型位域(bitfield X)详细说明

参数 -t X 中的 X 对应不同 NFC 协议类型的"位域组合",每个协议对应一个独立的 bit 位(十进制数值),多个协议可通过"数值相加"实现同时扫描(如 ISO14443A + ISO14443B 对应 1+8=9)。

十进制数值(X 组成部分) 对应协议类型 协议说明与常见卡片类型 备注(依赖关系)
1 ISO14443A 最常见的 NFC 协议之一,支持 106 kbps 数据速率;常见卡片:MIFARE Classic 1K/4K、MIFARE Ultralight、NTAG 21x(手机 NFC 标签) 独立协议,无需依赖其他类型
2 Felica (212 kbps) 索尼开发的非接触式协议,212 kbps 速率;常见卡片:日本 Suica 交通卡、部分门禁卡 独立协议
4 Felica (424 kbps) Felica 协议的高速版本,424 kbps 速率;常见卡片:部分高端门禁卡、电子身份证 独立协议
8 ISO14443B 另一种主流 NFC 协议,与 ISO14443A 不兼容;常见卡片:中国二代身份证、部分银行 IC 卡 若选择 16/32/64/128,会自动包含此类型(即选择这些数值时,X 需叠加 8)
16 ISO14443B' ISO14443B 协议的扩展版本,支持更多加密算法;常见卡片:部分政府机构证件 依赖 ISO14443B(X=8),选择此类型时需 X=8+16=24
32 ISO14443B-2 ST SRx ISO14443B 协议的子类型,支持 ST SRx 芯片;常见卡片:特定工业级 RFID 标签 依赖 ISO14443B(X=8),选择此类型时需 X=8+32=40
64 ISO14443B-2 ASK CTx ISO14443B 协议的子类型,支持 ASK CTx 调制方式;常见卡片:部分医疗设备标签 依赖 ISO14443B(X=8),选择此类型时需 X=8+64=72
128 ISO14443B iClass ISO14443B 协议的 iClass 变种,支持高频加密;常见卡片:HID iClass 门禁卡 依赖 ISO14443B(X=8),选择此类型时需 X=8+128=136
256 ISO14443A-3 Jewel ISO14443A 协议的 Jewel 子类型,低功耗设计;常见卡片:NXP Jewel 标签 独立协议
512 ISO14443A-2 NFC Barcode ISO14443A 协议的条形码扩展,支持 NFC 条形码标签;常见卡片:手机扫描的 NFC 条形码贴纸 独立协议
1023 All types(所有类型) 默认值,扫描上述所有协议类型的卡片(1+2+4+8+16+32+64+128+256+512=1023) 无需依赖,覆盖所有协议

3. 常见参数组合示例

命令组合 中文解析 适用场景
nfc-list 默认模式:扫描所有协议类型的卡片,输出读卡器与卡片的基础信息(如 UID、类型) 快速确认读卡器连接与卡片基础属性(通用场景)
nfc-list -v 详细模式:扫描所有协议类型,输出底层通信参数(ATQA、SAK、固件版本等) 卡片逆向分析、读卡器固件版本确认、通信问题排查
nfc-list -t 1 仅扫描 ISO14443A 协议卡片(如 MIFARE Classic、NTAG),过滤其他协议干扰 仅需处理 MIFARE 系列卡片,避免 Felica、ISO14443B 卡片干扰
nfc-list -t 9 扫描 ISO14443A(1)+ ISO14443B(8)协议卡片(1+8=9) 同时处理 MIFARE 卡片与二代身份证/银行 IC 卡的场景
nfc-list -t 136 -v 详细模式扫描 ISO14443B(8)+ iClass(128)协议卡片(8+128=136),输出底层信息 分析 HID iClass 门禁卡,获取详细通信参数

三、nfc-list 完整使用教程(全场景覆盖)

1. 前提准备:硬件与环境确认

使用 nfc-list 前需确保 NFC 读卡器正常连接、驱动安装完成,避免因硬件问题导致扫描失败:

1.1 必备硬件

  • NFC 读卡器:支持 libnfc 库的 USB 接口 NFC 读卡器(推荐 ACR122U、PN532 模块,兼容性最佳);
  • NFC 卡片/标签(可选):待检测的 NFC 卡片(如 MIFARE Classic 1K、NTAG 213、二代身份证等),用于验证扫描功能。

1.2 软件环境验证与安装

复制代码
# 步骤 1:安装 libnfc 库与 nfc-list 工具(Kali 默认预装,未安装则执行)
sudo apt update && sudo apt install libnfc-bin -y
# 说明:nfc-list 属于 libnfc-bin 软件包,安装后可直接使用

# 步骤 2:验证工具可用性
nfc-list --help
# 输出参数说明(如"usage: nfc-list [-v] [-t X]"),说明安装成功

# 步骤 3:确认读卡器驱动加载
# 方法 1:查看 USB 设备列表,确认读卡器存在(以 ACR122U 为例)
lsusb | grep -i "nfc"
# 成功输出示例:Bus 001 Device 005: ID 072f:2200 Advanced Card Systems, Ltd ACR122U NFC Reader
# 方法 2:查看 libnfc 设备配置(确认读卡器被识别为 NFC 设备)
nfc-scan-device
# 成功输出示例:nfc-scan-device: found 1 device(s)
# - device #0: ACR122U PICC Interface(读卡器型号)

1.3 关键注意事项

  • 部分读卡器需 sudo 权限才能正常扫描(如 ACR122U),建议所有命令加 sudo 执行;
  • 避免同时运行多个 NFC 工具(如 pcscd、mfoc),可能导致读卡器占用冲突(扫描失败);
  • 卡片需紧贴读卡器感应区(距离不超过 1cm),否则可能因信号弱导致扫描失败。

2. 场景 1:基础读卡器与卡片检测(默认模式)

场景描述:首次连接 NFC 读卡器(如 ACR122U),需快速确认读卡器是否被系统识别,同时检测贴近的 MIFARE Classic 1K 卡片的基础信息(UID、类型)。

复制代码
# 步骤 1:执行默认扫描(无参数,扫描所有协议)
sudo nfc-list

# 步骤 2:分析输出结果(分"读卡器信息"与"卡片信息"两部分)
# 成功输出示例:
# nfc-list uses libnfc 1.8.0
# NFC device: ACR122U PICC Interface opened
# 1 ISO14443A passive target(s) found:
# ISO/IEC 14443A (106 kbps) target:
#  ATQA (SENS_RES): 00  04
#  UID (NFCID1): 12  34  56  78
#  SAK (SEL_RES): 08
#  Possible types:
#    MIFARE Classic 1K
#    MIFARE Plus (4 Byte UID or 4 Byte RID)
#    MIFARE Ultralight

# 结果解析:
# 1. 读卡器信息:NFC device: ACR122U PICC Interface opened(读卡器型号为 ACR122U,已正常打开);
# 2. 卡片信息:ISO14443A 协议(106 kbps)、UID 为 12345678、可能类型为 MIFARE Classic 1K(符合目标卡片)。

# 步骤 3:无卡片时的输出(验证读卡器是否正常)
# 移除所有卡片,重新执行命令:
sudo nfc-list
# 输出示例:
# nfc-list uses libnfc 1.8.0
# NFC device: ACR122U PICC Interface opened
# No target found, try again(无卡片,读卡器正常)

# 失败处理:若提示"nfc-list: error while loading shared libraries"
# 原因:libnfc 库路径配置错误,执行以下命令修复:
sudo ldconfig  # 刷新动态链接库缓存,再重新执行 nfc-list

3. 场景 2:详细卡片信息分析(verbose 模式)

场景描述:已知卡片为 ISO14443A 协议,但需获取底层通信参数(如 ATQA、SAK、最大帧长度),用于判断卡片具体型号(如区分 MIFARE Classic 1K 与 Ultralight)。

复制代码
# 步骤 1:启用详细模式扫描(-v 参数)
sudo nfc-list -v

# 步骤 2:分析详细输出结果
# 成功输出示例(MIFARE Classic 1K 卡片):
# nfc-list uses libnfc 1.8.0
# NFC device: ACR122U PICC Interface opened
#  #0: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 68 (SENSB_RES)
# 1 ISO14443A passive target(s) found:
# ISO/IEC 14443A (106 kbps) target:
#  ATQA (SENS_RES): 00  04 	- UID size: single (4 bytes)
#  UID (NFCID1): 12  34  56  78 	- 4-byte UID
#  SAK (SEL_RES): 08 	- Answer to select: fsd=0x08 (16 bytes)
#  ATS: 07  80  80  00  00  00  00 	- ATS length: 7 bytes
#    TL: 07 (7 bytes follow)
#    T0: 80 (FSCI=00h (8 bytes), T=0)
#    TA(1): 80 (FWI=00h (4096/fc), SFGI=00h (4096/fc))
#    TB(1): 00 (PI1=00h, Protocol: ISO 14443-4)
#    TC(1): 00 (NAD supported: no, CID supported: no)
#    Historical bytes: 00  00  00
#  Max Frame Size (FSD): 128 bytes
#  Possible types:
#    MIFARE Classic 1K
#    MIFARE Plus (4 Byte UID or 4 Byte RID)

# 关键参数解析:
# - ATQA=00 04:卡片应答请求,MIFARE Classic 1K 典型值;
# - SAK=08:选择应答,表明卡片为 MIFARE 非加密或 Classic 类型;
# - ATS=07 80 80 00 00 00 00:协议激活应答,包含数据传输参数;
# - Max Frame Size=128 bytes:最大帧长度,Classic 系列特征。

# 对比:MIFARE Ultralight 卡片的详细输出差异
# 若为 Ultralight 卡片,SAK 通常为 00,且无 ATS 响应(因不支持 ISO14443-4 协议),可据此区分类型。

# 步骤 3:记录关键参数(用于后续工具适配)
# 例如,将 UID 与 SAK 记录到文件,供 mfoc 破解时参考:
sudo nfc-list -v | grep -E "UID|SAK" >> card_info.txt

4. 场景 3:指定协议类型扫描(过滤无关卡片)

场景描述:测试环境中存在多种协议的 NFC 卡片(如 ISO14443A 的 MIFARE 卡、ISO14443B 的二代身份证),需仅扫描 ISO14443A 协议卡片,避免其他卡片干扰检测结果。

复制代码
# 步骤 1:明确目标协议的位域值(ISO14443A 对应 1)
# 参考"协议类型位域表",确认仅扫描 ISO14443A 需 X=1

# 步骤 2:执行指定协议扫描(-t 1 参数)
sudo nfc-list -t 1

# 步骤 3:验证过滤效果
# 情况 1:贴近 ISO14443A 卡片(如 MIFARE Classic)
# 输出示例(正常识别):
# nfc-list uses libnfc 1.8.0
# NFC device: ACR122U PICC Interface opened
# 1 ISO14443A passive target(s) found:
# ISO/IEC 14443A (106 kbps) target:
#  UID (NFCID1): 12  34  56  78
#  Possible types: MIFARE Classic 1K

# 情况 2:贴近非 ISO14443A 卡片(如 ISO14443B 的二代身份证)
# 输出示例(不识别,符合过滤要求):
# nfc-list uses libnfc 1.8.0
# NFC device: ACR122U PICC Interface opened
# No target found, try again

# 进阶场景:同时扫描 ISO14443A 与 Felica (212 kbps) 协议
# 位域值:1(ISO14443A)+ 2(Felica 212 kbps)= 3
sudo nfc-list -t 3
# 贴近 Felica 卡片时会正常识别,贴近 ISO14443B 卡片时无输出

5. 场景 4:批量卡片 UID 读取(快速收集标识)

场景描述:需批量读取 10 张 MIFARE 卡片的 UID(用于资产登记),通过脚本自动化执行 nfc-list 并提取 UID,避免手动记录错误。

复制代码
# 步骤 1:创建批量读取脚本(read_uid_batch.sh)
cat > read_uid_batch.sh << EOF
#!/bin/bash
# 批量读取 NFC 卡片 UID,支持自动跳过空读
output_file="card_uids.txt"
echo "开始批量读取 UID,共 10 张卡片..." > \$output_file
for ((i=1; i<=10; i++))
do
  echo "请插入第 \$i 张卡片(30 秒内)..."
  # 使用 timeout 限制单张卡片读取时间(30 秒),提取 UID 行
  uid=\$(timeout 30s sudo nfc-list -t 1 | grep "UID (NFCID1):" | awk '{print \$4\$5\$6\$7}')
  if [ -n "\$uid" ]; then
    echo "第 \$i 张卡片 UID: \$uid" >> \$output_file
    echo "第 \$i 张卡片读取成功:\$uid"
  else
    echo "第 \$i 张卡片读取失败(超时或非目标卡片)" >> \$output_file
    echo "第 \$i 张卡片读取失败,请重试..."
    i=\$((i-1))  # 失败重试当前序号
  fi
  echo "请移除卡片,准备下一张..."
  sleep 3  # 等待移除卡片
done
echo "批量读取完成,结果已保存至 \$output_file"
EOF

# 步骤 2:赋予脚本执行权限
chmod +x read_uid_batch.sh

# 步骤 3:运行脚本批量读取
./read_uid_batch.sh

# 执行流程:
# 1. 依次提示插入第 1-10 张卡片,每张卡超时 30 秒;
# 2. 成功读取后提取 UID(如 12345678)并保存到 card_uids.txt;
# 3. 失败时自动重试当前序号,确保 10 张卡均被处理;
# 4. 完成后可查看文件:cat card_uids.txt。

# 脚本优化建议:
# - 若卡片为其他协议,修改 -t 参数(如 ISO14443B 需 -t 8);
# - 增加错误日志记录,便于排查读取失败的卡片。

四、常见问题与解决方案

常见问题 可能原因 解决方案
"nfc-list: ERROR: Unable to open NFC device"(无法打开读卡器) 1. 读卡器未插入或未被系统识别;2. 读卡器被其他进程占用(如 pcscd);3. 权限不足 1. 重新插拔读卡器,lsusb 确认设备存在;2. 关闭占用进程:sudo systemctl stop pcscd;3. 加 sudo 执行命令(sudo nfc-list
"No target found, try again"(无卡片,但实际已贴近) 1. 卡片距离读卡器过远(超过 1cm);2. 卡片协议与扫描类型不匹配(如用 -t 1 扫描 ISO14443B 卡片);3. 卡片损坏或无电(被动式标签无需供电,此情况少见) 1. 将卡片紧贴读卡器感应区;2. 取消协议过滤(默认 -t 1023)或修改对应协议类型;3. 更换其他卡片测试,确认是否为卡片问题
"invalid bitfield X"(-t 参数值无效) 1. X 为非数值(如字母);2. X 超过有效范围(大于 1023 或小于 1);3. 依赖协议未包含(如单独使用 -t 16 而未加 8) 1. 确保 X 为十进制数字;2. X 范围限制为 1-1023;3. 若使用 16/32/64/128,需叠加 8(如 -t 24 表示 8+16)
详细模式(-v)无额外信息输出 1. 工具版本过旧(部分旧版 libnfc 不支持详细输出);2. 读卡器不支持获取底层参数 1. 更新 libnfc 库:sudo apt upgrade libnfc-bin;2. 更换兼容性更好的读卡器(如 ACR122U)
扫描结果不稳定(有时识别,有时不识别) 1. 卡片与读卡器接触不良;2. 读卡器供电不足(USB 接口供电不稳定);3. 环境存在电磁干扰 1. 确保卡片平整贴合读卡器;2. 将读卡器插入主机后置 USB 接口(避免 Hub 供电不足);3. 远离强电磁源(如微波炉、电机)

五、注意事项与安全规范

  • 合法使用边界
    • 仅可对自己合法拥有或获得明确授权的 NFC 卡片/设备执行扫描(如个人物品、测试设备);
    • 禁止在公共场所未经允许扫描他人 NFC 卡片(如手机、门禁卡),可能侵犯他人隐私或涉嫌违法(如《个人信息保护法》)。
  • 隐私保护要点
    • 卡片 UID 可能关联个人信息(如门禁卡 UID 对应住户信息),扫描后的数据需妥善保管,禁止泄露或用于非法用途;
    • 批量收集的 UID 列表需加密存储(如 gpg -c card_uids.txt),避免成为攻击目标(如复制门禁卡)。
  • 工具局限性认知
    • nfc-list 仅能读取卡片公开信息(UID、类型等),无法获取加密数据或密钥(需结合 mfoc、mfcuk 等工具);
    • 对加密强度高的卡片(如带动态加密的 NFC 卡),可能无法识别 UID 或仅能获取部分信息。
  • 硬件兼容性建议
    • 优先选择支持 libnfc 库的读卡器(如 ACR122U、PN532),避免使用专有驱动的设备(可能无法被 nfc-list 识别);
    • 使用前通过 nfc-scan-device 确认读卡器型号在支持列表中,减少兼容性问题。
相关推荐
软件测试媛2 小时前
2026软件测试面试题大全(含答案+文档)
功能测试·测试工具·面试·ai软件测试
攻城狮在此3 小时前
华三交换机链路聚合配置(三层聚合)
网络·华为
class心平气和3 小时前
postman-mcp-server
测试工具·postman
evo-master3 小时前
网络故障排除方法
linux·服务器·网络
Johnstons4 小时前
网络流量监控工具怎么选
运维·网络·网络故障排除·网络流量分析·网络性能监控
IP老炮不瞎唠5 小时前
谷歌账号安全运营指南
安全
兢谨网安5 小时前
AI安全:从技术加固到体系化防御的实战演进
人工智能·安全·网络安全·渗透测试
望安认证6 小时前
通用准则Common Criteria认证:海外项目投标的核心安全资质——CC EAL
安全
鹿鸣天涯6 小时前
OpenClaw安全使用实践指南
安全