当前位置: 首页 > article >正文

手把手调试CAT主动式命令:用Python模拟终端与SIM卡的完整对话流程

用Python构建CAT主动式命令调试工具从协议解析到交互模拟实战在物联网设备和移动终端开发中SIM卡应用工具包(CAT)的主动式命令机制是实现卡端与终端双向通信的核心技术。本文将带您从零构建一个Python模拟环境完整复现TERMINAL PROFILE交换、91XX状态字处理以及SET UP EVENT LIST等关键交互流程。1. CAT通信基础与开发环境搭建1.1 理解CAT会话的生命周期典型的CAT主动式命令会话遵循严格的状态机流程能力协商阶段终端发送TERMINAL PROFILE声明支持的功能集命令触发阶段SIM卡通过91XX状态字请求主动式命令传输命令获取阶段终端使用FETCH指令获取具体命令内容响应回传阶段终端执行后通过TERMINAL RESPONSE反馈结果class CATSession: def __init__(self): self.state INIT self.terminal_capabilities None self.pending_command None def handle_apdu(self, apdu): if self.state INIT: return self._process_terminal_profile(apdu) elif self.state ACTIVE: return self._process_command(apdu)1.2 硬件准备与Python库选型即使没有物理读卡器我们也可以通过软件模拟完整流程组件纯软件方案硬件增强方案SIM卡接口PySimACS读卡器pcsc-lite协议栈python-smartcardpyscardAPDU解析construct库自定义解析器通信通道虚拟COM端口蓝牙HSP推荐开发环境配置pip install python-smartcard construct pycryptodome2. TERMINAL PROFILE的深度解析与模拟2.1 终端能力位图结构详解TERMINAL PROFILE采用TLV格式传输其中最关键的是能力位图字段。每个bit对应ETSI TS 102 223规范定义的具体功能from construct import BitStruct, FlagsEnum, Bytes terminal_profile BitStruct( profile_download / Flag, sms_pp_download / Flag, cell_broadcast / Flag, menu_selection / Flag, # ...其他38个能力标志位 reserved / Bytes(10) # 保留字段 )2.2 Python实现动态能力协商下面代码演示如何生成和解析TERMINAL PROFILEdef generate_terminal_profile(): capabilities { profile_download: True, setup_menu: True, display_text: True, # ...设置实际支持的功能 } return terminal_profile.build(capabilities) def parse_terminal_profile(data): try: parsed terminal_profile.parse(data) return {k:v for k,v in parsed.items() if v is True} except Exception as e: raise ValueError(fTERMINAL PROFILE解析失败: {str(e)})典型调试问题排查位图对齐错误确保字节边界正确处理能力声明冲突避免声明未实现的功能编码格式不符检查ASCII/UCS2编码选择3. 主动式命令的完整处理流程3.1 91XX状态字的特殊处理机制当SIM卡返回91XX时表示有待处理的主动式命令。XX字段指示后续FETCH需要获取的数据长度def handle_response(sw1, sw2, data): if sw1 0x91: cmd_length sw2 return { status: PROACTIVE_CMD_PENDING, expected_length: cmd_length } elif sw1 0x90 and sw2 0x00: return {status: OK} else: return {status: ERROR, code: f{sw1:02X}{sw2:02X}}3.2 FETCH与TERMINAL RESPONSE的配对实现这对命令构成完整的主动式命令生命周期class ProactiveHandler: def __init__(self): self.active_commands Queue() def process_fetch(self, length): if not self.active_commands.empty(): cmd self.active_commands.get() return (0x90, 0x00, cmd) return (0x91, 0x00, None) # 无待处理命令 def send_response(self, cmd_tag, result_code): response self._build_response(cmd_tag, result_code) self._verify_response_integrity(response) return response4. 典型主动式命令实战解析4.1 SET UP EVENT LIST的实现细节该命令允许SIM卡订阅终端事件通知核心是事件类型编码事件代码含义数据格式0x09数据可用通道状态数据长度0x0A通道状态变化新状态代码0x03位置更新MCCMNCLACPython实现示例def build_event_list(events): template [ 0xD0, # Proactive command tag 0x00, # Length placeholder 0x81, 0x03, # Command details tag 0x01, # Command number 0x05, # SET UP EVENT LIST 0x00, # Qualifier 0x82, 0x02, # Device IDs 0x81, 0x82, 0x99, # Event list tag len(events) ] template.extend(events) template[1] len(template) - 2 # Set correct length return bytes(template)4.2 DISPLAY TEXT的优先级控制文本显示命令支持三种优先级处理方式普通优先级排队显示不影响当前界面高优先级立即覆盖当前显示内容用户确认型需用户明确确认才能继续def show_text(text, priorityNORMAL, iconNone): qualifier { NORMAL: 0x00, HIGH: 0x80, CONFIRM: 0x01 }.get(priority, 0x00) text_encoded text.encode(UCS-2) if isinstance(text, str) else text return build_display_text(text_encoded, qualifier, icon)5. 调试技巧与异常处理5.1 常见状态字错误排查表状态码含义解决方案91XX正常待处理立即发送FETCH92XX存储空间不足优化命令数据量93XX应用无效检查AID选择94XX不支持的指令确认TERMINAL PROFILE声明5.2 APDU通信日志分析技巧建议使用以下格式记录通信过程[方向][时间][状态] 数据详情示例日志分析工具def analyze_log(log_path): with open(log_path) as f: for line in f: if [OUT] in line and TERMINAL PROFILE in line: parse_terminal_profile(extract_data(line)) elif [IN] in line and 91 in line: handle_pending_command(extract_sw(line))在真实项目中我们发现大多数CAT实现问题源于TERMINAL PROFILE能力声明与实际处理逻辑的不一致。通过本文构建的模拟环境开发者可以提前验证各种边界场景大幅降低现场调试难度。

相关文章:

手把手调试CAT主动式命令:用Python模拟终端与SIM卡的完整对话流程

用Python构建CAT主动式命令调试工具:从协议解析到交互模拟实战 在物联网设备和移动终端开发中,SIM卡应用工具包(CAT)的主动式命令机制是实现卡端与终端双向通信的核心技术。本文将带您从零构建一个Python模拟环境,完整复现TERMINAL PROFILE交…...

别再傻傻分不清!给硬件小白的SSD、eMMC、UFS选购避坑指南(附手机/电脑场景推荐)

别再傻傻分不清!给硬件小白的SSD、eMMC、UFS选购避坑指南(附手机/电脑场景推荐) 当你站在数码卖场,面对琳琅满目的手机、电脑和平板,是否曾被"UFS 3.1"、"eMMC 5.1"这些专业术语搞得一头雾水&…...

Blender 3MF插件:轻松实现3D打印文件的无缝转换

Blender 3MF插件:轻松实现3D打印文件的无缝转换 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印文件的格式转换而头疼吗?传统STL格式…...

3秒破解百度网盘密码:baidupankey智能提取码工具终极指南

3秒破解百度网盘密码:baidupankey智能提取码工具终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码而反复搜索浪费时间吗?baidupankey作为一款专业的百度网盘提取码智能获取…...

STM32 FSMC驱动LCD避坑指南:从地址映射到时序配置,手把手解决ILI9806G屏幕花屏问题

STM32 FSMC驱动LCD避坑实战:从时序异常到硬件连接的全方位诊断手册 当你在深夜调试STM32的FSMC接口驱动ILI9806G液晶屏时,突然发现屏幕出现雪花噪点、颜色错乱或是局部撕裂现象——这可能是每个嵌入式开发者都经历过的噩梦时刻。本文将以一个真实的工业级…...

从量变到智变:深度解析国内的人力外包公司哪些靠谱

面对“十五五”开局的新一轮政策红利,国内的人力资源外包公司哪些比较靠谱?当下的市场风口已经由基础批量操作转向了高附加值的基层文职、专业销售及高端技术岗位的靶向交付。在此背景下,利用AIHR重构服务闭环,成为了顶尖机构的不…...

Blender 3MF插件终极指南:如何轻松实现3D打印模型的无损传输

Blender 3MF插件终极指南:如何轻松实现3D打印模型的无损传输 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为3D打印工作流中的格式转换问题烦恼吗&…...

C++高精度乘法保姆级教程:从‘大数乘小数’到‘大数乘大数’(附完整代码与避坑点)

C高精度乘法保姆级教程:从‘大数乘小数’到‘大数乘大数’(附完整代码与避坑点) 1. 为什么我们需要高精度乘法? 在编程竞赛或实际开发中,我们经常会遇到需要处理超大整数的情况。比如计算两个100位数的乘积&#xff0c…...

输入法词库转换:如何打破不同输入法间的数据壁垒

输入法词库转换:如何打破不同输入法间的数据壁垒 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾经因为更换输入法而不得不放弃多年积累的个人词…...

lazygit.nvim最佳实践:团队协作与项目管理技巧

lazygit.nvim最佳实践:团队协作与项目管理技巧 【免费下载链接】lazygit.nvim Plugin for calling lazygit from within neovim. 项目地址: https://gitcode.com/gh_mirrors/la/lazygit.nvim lazygit.nvim是一款让你在Neovim中直接调用lazygit的插件&#xf…...

零代码玩转Open MCT时间系统:从UTC到自定义格式全攻略

零代码玩转Open MCT时间系统:从UTC到自定义格式全攻略 【免费下载链接】openmct A web based mission control framework. 项目地址: https://gitcode.com/gh_mirrors/op/openmct Open MCT是一款基于Web的任务控制框架,其强大的时间系统功能能够…...

3分钟掌握E-Hentai漫画批量下载:免费自动化下载终极指南

3分钟掌握E-Hentai漫画批量下载:免费自动化下载终极指南 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 你是否厌倦了在E-Hentai上一页页手动保存漫画&…...

如何用AICoverGen轻松制作AI翻唱:5分钟上手的完整指南

如何用AICoverGen轻松制作AI翻唱:5分钟上手的完整指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 想要让…...

网盘直链下载助手终极指南:八大网盘一键获取真实下载链接,彻底告别限速烦恼

网盘直链下载助手终极指南:八大网盘一键获取真实下载链接,彻底告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 /…...

3步搞定显示器色彩校准:novideo_srgb让你的NVIDIA显卡显示真实色彩

3步搞定显示器色彩校准:novideo_srgb让你的NVIDIA显卡显示真实色彩 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirrors/no/novideo…...

微信聊天记录恢复终极指南:5分钟快速解密你的重要数据

微信聊天记录恢复终极指南:5分钟快速解密你的重要数据 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 微信聊天记录承载着我们珍贵的回忆和重要信息,但加密的数据库文件让数据恢复…...

Copilot Next 工作流提速83%的关键配置,深度解析LLM上下文锚点绑定机制与本地Agent协同协议

更多请点击: https://intelliparadigm.com 第一章:Copilot Next 工作流提速83%的核心价值与演进图谱 Copilot Next 并非简单的能力叠加,而是基于语义理解增强、上下文感知重构与执行引擎深度协同的范式跃迁。其 83% 的工作流加速实测数据源…...

3分钟掌握KKManager:终极游戏模组管理工具使用全攻略

3分钟掌握KKManager:终极游戏模组管理工具使用全攻略 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager 想彻底告别游戏模组管理的混乱局面吗&#…...

题解:洛谷 P8818 [CSP-S 2022] 策略游戏

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

题解:洛谷 P5688 [CSP-S 2019 江西] 散步

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

MacBook外接显示器踩坑记:我是如何用一份XML配置文件拯救了2K屏的显示效果

MacBook外接2K显示器终极调校指南:从字体发虚到视网膜级显示的进阶之路 第一次将那台27英寸2K显示器连接到我的MacBook Pro时,满心期待瞬间化为失望——那些本该锐利的文字边缘像被水浸过一样模糊不清。作为每天需要处理代码和设计稿的开发者&#xff0c…...

手把手解析AHB总线:HREADY、HREADYOUT、HRESP这些关键信号到底怎么用?

手把手解析AHB总线:HREADY、HREADYOUT、HRESP这些关键信号到底怎么用? 在数字芯片设计中,AMBA总线堪称工程师的"老熟人",而AHB作为其高性能成员,几乎出现在所有需要高速数据传输的场景中。但真正动手写过AHB…...

Linux服务器被植入挖矿木马后,除了删文件你还应该做的7件事(含UFW/密钥登录配置)

Linux服务器遭遇挖矿木马后的深度安全加固指南 当你的Linux服务器突然变得异常卡顿,GPU占用率飙升到100%,很可能已经沦为挖矿木马的"肉鸡"。很多管理员的第一反应是找到并删除可疑文件,但这只是治标不治本。去年处理过数十起类似事…...

【2024最新实践】:R语言调用Hugging Face模型+内置bias_test()函数实现端到端偏见扫描(仅需R 4.3.2+3个CRAN包)

更多请点击: https://intelliparadigm.com 第一章:R语言在大语言模型偏见检测中的统计方法 R语言凭借其强大的统计建模能力与丰富的文本分析生态,已成为评估大语言模型(LLM)社会偏见的重要工具。通过构造受控提示集、…...

如何在老旧电脑上安装Windows 11:MediaCreationTool.bat完整指南

如何在老旧电脑上安装Windows 11:MediaCreationTool.bat完整指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat…...

告别试用期焦虑:IDE Eval Resetter让你的JetBrains工具永不过期

告别试用期焦虑:IDE Eval Resetter让你的JetBrains工具永不过期 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为IntelliJ IDEA、PyCharm等JetBrains IDE的试用到期而烦恼吗?每次看到…...

3个实战技巧掌握obs-virtual-cam:从零构建专业级虚拟摄像头系统

3个实战技巧掌握obs-virtual-cam:从零构建专业级虚拟摄像头系统 【免费下载链接】obs-virtual-cam obs-studio plugin to simulate a directshow webcam 项目地址: https://gitcode.com/gh_mirrors/ob/obs-virtual-cam 你是否厌倦了视频会议中单调的摄像头画…...

别再乱用MyBatisPlus的selectOne了!这3个坑我帮你踩过了(附正确用法)

MyBatisPlus查询方法避坑指南:从生产事故看selectOne的正确使用姿势 上周团队里刚发生一起线上事故——用户积分无故清零。排查后发现是某位同事在代码中误用了selectOne方法,导致本该返回唯一结果的查询匹配到多条数据,系统错误地取了第一条…...

手机端实时低光增强:手把手部署CVPR2020的ZeroDCE模型到Android (附TensorFlow Lite转换教程)

手机端实时低光增强:ZeroDCE模型在Android端的完整部署指南 从实验室到口袋:为什么选择ZeroDCE 深夜街头抓拍、昏暗餐厅记录美食、逆光环境下的自拍——这些场景对手机摄影始终是巨大挑战。传统图像处理方案要么效果生硬,要么计算复杂难以实时…...

别再被X11报错卡住!手把手教你解决虚拟机里Java Swing程序显示不了的坑

别再被X11报错卡住!手把手教你解决虚拟机里Java Swing程序显示不了的坑 每次在Linux虚拟机里调试Java Swing程序时,那个刺眼的"AWTError: Cant connect to X11 window server"报错是不是让你血压飙升?作为常年与虚拟机打交道的开发…...