You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中保存proxmark3命令core.console的执行结果到文件

解决方案

要在Proxmark3的Lua脚本中提取lf em 410x read命令的ID结果并保存到log.txt,可以通过以下两种可行方法实现:

方法一:临时文件中转输出

这种方法先将命令输出写入临时文件,再从中提取目标内容并保存到目标日志文件:

-- 执行命令并将输出定向到临时文件
core.console('lf em 410x read > temp_output.txt')

-- 读取临时文件内容
local input_file = io.open('temp_output.txt', 'r')
if not input_file then
    print('无法读取命令输出')
    return
end

local full_output = input_file:read('*a')
input_file:close()
os.remove('temp_output.txt') -- 清理临时文件

-- 匹配并提取目标ID行
local target_line = full_output:match('%[%+%] (EM 410x ID %x+)')
if not target_line then
    print('未检测到有效的EM 410x ID')
    return
end

-- 将结果写入log.txt
local log_file = io.open('log.txt', 'w')
if log_file then
    log_file:write(target_line .. '\n')
    log_file:close()
    print('ID已成功保存到log.txt')
else
    print('无法写入log.txt')
end

方法二:内存捕获输出(无临时文件)

通过重定向标准输出到内存缓冲区,直接捕获命令输出并处理,无需生成临时文件:

-- 保存原始标准输出句柄
local original_stdout = io.stdout

-- 创建内存文件用于捕获输出
local output_buffer = io.tmpfile()
io.stdout = output_buffer

-- 执行读卡命令
core.console('lf em 410x read')

-- 恢复原始标准输出
io.stdout = original_stdout

-- 读取并处理缓冲区内容
output_buffer:seek('set')
local full_output = output_buffer:read('*a')
output_buffer:close()

-- 提取目标ID行
local target_line = full_output:match('%[%+%] (EM 410x ID %x+)')
if not target_line then
    print('未找到有效ID')
    return
end

-- 写入日志文件
local log_file = io.open('log.txt', 'w')
if log_file then
    log_file:write(target_line .. '\n')
    log_file:close()
    print('ID已保存到log.txt')
else
    print('无法打开log.txt进行写入')
end

关键说明

  • 正则表达式%[%+%] (EM 410x ID %x+)用于精准匹配输出中的目标行,确保只提取包含有效ID的内容
  • 确保Proxmark3设备有读写当前目录文件的权限,避免因权限问题导致文件操作失败
  • 若命令执行失败(如无TAG靠近),脚本会提示未找到有效ID,需确保读卡操作正常

内容的提问来源于stack exchange,提问作者Jarek Barwinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:35:24