如何在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
相关产品推荐
相关产品推荐

