物联网开发工具【免费下载链接】Xiaomi-cloud-tokens-extractorThis tool retrieves tokens for all devices connected to Xiaomi cloud and encryption keys for BLE devices.项目地址https://gitcode.com/gh_mirrors/xia/Xiaomi-cloud-tokens-extractor点击查看免费下载导读本文基于开源仓库 Xiaomi Cloud Tokens ExtractorREADME.md编写围绕登录小米云 → 选择服务器区域 → 提取全部设备 Token 与 BLE 加密密钥这一核心链路展开。读完你将掌握 Windows / Linux / Docker / Python 四种运行方式、用户名密码与二维码两种认证流程、全部命令行参数的含义与用法、设备信息输出的字段结构与 JSON 格式以及常见登录故障的排查方法为后续将米家设备接入 Home Assistant 等本地平台做好准备。一、工具定位能做什么、解决什么问题按照项目 README.md 的定义这个工具的核心能力只有一句话检索连接到小米云的所有设备的 Token以及 BLE蓝牙低功耗设备的加密密钥This tool retrieves tokens for all devices connected to Xiaomi cloud and encryption keys for BLE devices.。在实践中的典型应用场景是米家 App 内不提供设备 Token 的导出入口而将米家设备接入 Home Assistant 等本地智能家居平台时往往需要设备的token才能建立本地通信部分 BLE 设备如传感器、门锁等还需要beaconkey这类加密密钥才能解密其蓝牙广播数据。该工具通过模拟小米账号登录流程把账号下所有设备及其 Token、IP、MAC、型号等信息一次性拉取出来省去了逐个设备抓包或依赖第三方云的麻烦。它支持两种认证方式token_extractor.py 与 README 中均有说明认证方式说明用户名 密码用户名支持邮箱、手机号或小米云账号 ID密码交互输入时不会回显二维码通过扫码完成授权适合密码/验证码流程受阻的场景登录成功后需要选择小米服务器的区域cn代表中国、de代表德国等留空则会依次遍历所有可用区域。作为返回结果账号下连接的全部设备都会被列出并附带设备名称与 IP 地址等信息。二、支持的服务器区域工具内置的服务器区域列表定义在源码 token_extractor.py 中SERVERS [cn, de, us, ru, tw, sg, in, i2]对应关系如下区域代码是小米云实际使用的 API 前缀并非自定义区域代码含义cn中国de德国us美国ru俄罗斯tw台湾sg新加坡in印度i2其他地区国际版等在交互模式下程序会提示输入服务器提示语为Select server (one of: ...; Leave empty to check all available)输入空值即表示检查全部可用区域输入非法值会循环重新提示直到得到合法输入为止见 get_servers_to_check。三、四种运行方式3.1 Windows直接运行可执行文件Windows 用户无需安装 Python 环境直接下载对应发行版中的token_extractor.exe并运行即可。该可执行文件由 PyInstaller 打包生成打包配置见仓库根目录的 token_extractor.spec它把 token_extractor.py 编译为名为token_extractor的控制台程序consoleTrue并附带 icon.ico 作为图标。3.2 Linux 与 Home AssistantSSH Web Terminal在 Linux 或 Home Assistant 的 SSH Web Terminal 插件中直接执行仓库根目录的一键脚本bash run.sh该脚本run.sh的实际动作包括探测 Home Assistant 主机的 IP 地址并作为--host参数传入 → 下载发布包 zip → 解压 → 安装requirements.txt依赖 → 以python3 token_extractor.py --host HA主机IP运行 → 结束后清理临时文件。--host参数的作用是让二维码/验证码图片在浏览器中的访问地址指向 HA 主机而非127.0.0.1方便从局域网内其他设备打开查看详见后文图片展示机制。3.3 Docker 与 Home Assistant如果上面的脚本安装失败官方建议改用 Docker 版本bash run_docker.shrun_docker.sh 会下载 Docker 版发布包、基于仓库内的 Dockerfile 构建镜像并运行容器。镜像基于python:3-alpine构建安装build-base编译依赖后执行pip3 install --no-cache-dir -r requirements.txt容器入口为python ./token_extractor.py并映射了31415端口用于图片展示服务。在 Home Assistant 中运行该命令有一个前提必须在插件设置中关闭protected mode保护模式并重启插件否则脚本无法正常访问网络或执行系统调用。3.4 Python 手动运行需要自己动手的场景例如想直接阅读源码或二次开发可以手动安装运行git clone https://gitcode.com/gh_mirrors/xia/Xiaomi-cloud-tokens-extractor cd Xiaomi-cloud-tokens-extractor pip3 install -r requirements.txt python3 token_extractor.py依赖清单requirements.txt及其在代码中的实际用途如下依赖包源码中的用途requests发起小米账号登录与云 API 请求token_extractor.pypycryptodome提供 RC4ARC4加解密算法用于云 API 的密文通信token_extractor.pycharset-normalizerrequests 依赖的字符集检测库保证响应文本正确解码Pillow显示验证码 / 二维码图片token_extractor.pycolorama终端彩色日志输出token_extractor.py四、命令行参数详解工具通过argparse解析命令行参数token_extractor.py完整参数如下参数简写含义默认值 / 取值范围--non_interactive-ni非交互模式全程不弹出提示布尔开关--username-u用户名邮箱 / 手机号 / 小米账号 ID无--password-p密码无--server-s指定服务器区域cn/de/us/ru/tw/sg/in/i2/ 空--log_level-l日志级别默认CRITICAL可选CRITICAL、FATAL、ERROR、WARN、WARNING、INFO、DEBUG、NOTSET--output-o将结果写入指定 JSON 文件无--host无图片服务的对外主机地址默认127.0.0.1几点关键行为需要特别注意非交互模式的强制约束使用--non_interactive时必须同时提供--username和--password否则程序会直接报错退出token_extractor.pyYou need to specify username and password or run as interactive.非交互模式会跳过交互式提示所有print_if_interactive()的输出都会被抑制验证码、2FA 邮件验证码等需要人工参与的场景在非交互模式下会直接报错并要求改为交互模式运行见 handle_captcha 与 do_2fa_email_flow。非交互模式下服务器默认遍历全部未指定--server时get_servers_to_check()会返回完整的 8 个区域逐一检查token_extractor.py。日志级别默认CRITICAL即默认只输出严重错误排查问题时建议加上--log_level DEBUG观察详细请求与响应过程。日志通过ColorLogger输出到 stdout并按级别着色token_extractor.py。一个完整的非交互式调用示例python3 token_extractor.py \ --non_interactive \ --username youremail.com \ --password your_password \ --server cn \ --output devices.json \ --log_level INFO五、交互式运行流程以交互模式启动后程序依次执行入口见 main打印 ASCII 艺术横幅Xiaomi Cloud Tokens Extractor by Piotr Machowski提示选择登录方式输入p使用密码登录、q使用二维码登录输入其他字符会一直循环询问执行对应的登录流程登录成功后提示选择服务器区域留空 检查全部区域依次遍历服务器 → 家庭 → 设备打印设备信息交互模式下最后会等待按下 ENTER 才退出。六、密码登录流程源码级密码登录由PasswordXiaomiCloudConnector实现token_extractor.py整体分三步第一步login_step_1请求https://account.xiaomi.com/pass/serviceLogin?sidxiaomiio_jsontrue获取_sign签名为下一步提交凭据做准备token_extractor.py。第二步login_step_2向serviceLoginAuth2提交用户名、密码的MD5 大写哈希hashlib.md5(...).hexdigest().upper()、_sign等字段完成认证token_extractor.py。这一环节可能触发两类人工验证图形验证码captcha响应中出现captchaUrl时程序会下载验证码图片并展示要求用户输入图中字符区分大小写。交互模式下可用非交互模式会直接报错提示改为交互模式handle_captcha。邮箱二次验证2FA响应中出现notificationUrl时程序会自动走identity/list→sendEmailTicket→ 输入邮箱收到的验证码 →verifyEmail→identity/result/check→Auth2/end的完整 2FA 邮件流程最终从响应头extension-pragma中解析出ssecurity并从 STS 跳转后携带的 Cookie 中取得serviceTokendo_2fa_email_flow。第三步login_step_3访问上一步返回的location跳转地址从响应 Cookie 中取得serviceTokentoken_extractor.py。密码登录成功的标志是取得ssecurity、userId、serviceToken三样凭据后续所有云 API 调用都以它们为基础。七、二维码登录流程源码级二维码登录由QrCodeXiaomiCloudConnector实现token_extractor.py分为四步login_step_1请求https://account.xiaomi.com/longPolling/loginUrl获取二维码图片地址、登录 URL 与长轮询long polling地址login_step_2下载二维码图片并展示同时打印可访问的登录 URL供无法扫码时手动打开login_step_3对长轮询地址发起轮询每次请求超时 10 秒总超时由服务端返回的timeout字段决定等待手机扫码确认后从响应中解析出userId、ssecurity、passToken等凭据login_step_4访问location地址取得serviceToken。图片展示机制与--host参数无论是二维码还是验证码程序都通过present_image_image()来展示图片token_extractor.py其策略为优先在本机31415端口启动一个临时 HTTP 服务start_image_server见 token_extractor.py并打印形如http://host:31415的访问地址用户可在浏览器中打开查看图片若启动失败例如端口被占用则把图片保存为临时.jpg文件并尝试调用系统图片查看器打开仍失败则打印文件路径让用户手动打开。--host参数正是在这里发挥作用它决定打印出来的访问地址用哪个 IPtoken_extractor.py。在 Home Assistant 场景下run.sh/run_docker.sh会自动探测 HA 主机的 IP 并传入方便你用局域网内的手机或另一台电脑打开二维码页面。八、登录后的设备信息提取流程登录成功后主程序按服务器 → 家庭home→ 设备的层级遍历账号下的所有资源main列出家庭调用get_homes(country)请求/v2/homeroom/gethome拿到账号拥有的家庭列表同时调用get_dev_cnt(country)请求/v2/user/get_device_cnt补充共享家庭share_family信息token_extractor.py。列出设备对每个家庭调用get_devices(country, home_id, owner_id)请求/v2/home/home_device_list拿到该家庭下全部设备token_extractor.py。提取 BLE 密钥对设备 ID 以blt开头的 BLE 设备额外调用get_beaconkey(country, did)请求/v2/device/blt_get_beaconkey获取beaconkey即 README 中所说的BLE 设备的加密密钥token_extractor.py。控制台输出字段每个设备会打印如下字段token_extractor.py字段含义来源NAME设备名称云 API 返回的nameID设备 IDdidBLE 设备以blt开头云 API 返回的didBLE KEYBLE 设备专属的加密密钥get_beaconkey返回的beaconkeyMAC设备 MAC 地址云 API 返回的macIP设备局域网 IP 地址云 API 返回的localipTOKEN设备 Token接入 Home Assistant 等本地平台的核心凭据云 API 返回的tokenMODEL设备型号云 API 返回的model这正是 README 所说所有设备连同名称和 IP 地址一起列出的完整落地实现。-o输出 JSON 结构配合--output devices.json可以把结果写入文件顶层结构如下token_extractor.py[ { server: cn, homes: [ { home_id: 123456, home_owner: 用户名ID, devices: [ { name: 客厅台灯, did: 123456789, mac: AA:BB:CC:DD:EE:FF, localip: 192.168.1.100, token: xxxxxxxxxxxxxxxx, model: yeelink.light.lamp1, BLE_DATA: { beaconkey: ... } } ] } ] } ]其中 BLE 设备did以blt开头会额外包含BLE_DATA对象。九、底层协议细节进阶阅读理解底层实现有助于排查问题也能帮你判断哪些日志信息是有意义的。API 地址规则不同区域的 API 主机名由get_api_url(country)动态拼接token_extractor.pyreturn https:// ( if country cn else (country .)) api.io.mi.com/app即中国区为https://api.io.mi.com/app德国区为https://de.api.io.mi.com/app其余区域依此类推。请求加密流程每次云 API 调用都走execute_api_call_encrypted()token_extractor.py请求头带有MIOT-ENCRYPT-ALGORITHM: ENCRYPT-RC4、x-xiaomi-protocal-flag-cli: PROTOCAL-HTTP2等标记整体链路为基于当前时间戳生成nonce8 字节随机数 分钟级时间戳Base64 编码见 generate_nonce用ssecurity与nonce做 SHA-256 得到signed_noncesigned_nonce对请求参数计算 HMAC-SHA256 签名与 SHA-1 加密签名generate_signature、generate_enc_signature用 RC4 加密请求参数附上signature、ssecurity、_nonce后 POST 出去generate_enc_params收到响应后用 RC4 解密注意 RC4 使用前会先丢弃前 1024 字节见 encrypt_rc4 / decrypt_rc4。这些细节意味着工具运行时打印的登录成功 / 无法登录 / 无法获取设备等信息背后对应的是上述多步加解密与签名流程任何一步的服务端校验失败都会导致失败。十、故障排查TroubleshootingREADME 明确给出以下排查清单建议按顺序逐项尝试确认凭据正确务必使用小米账号邮箱 / 手机号 / 小米云账号 ID对应的用户名密码不要使用来自 Roborock石头App 等第三方 App 的登录凭据——它们往往无法通过小米账号体系认证。移除 Cloudflare DNSCloudflare 的 DNS 解析可能干扰小米登录域名的连接导致握手或请求失败。关闭网络广告拦截与限制AdGuard、PiHole 等广告拦截工具以及 UniFi Country Restriction地区限制等网络策略都可能阻断小米账号服务需要临时禁用。检查 2FA 邮件的垃圾箱邮箱二次验证码邮件可能被误判为垃圾邮件请到 SPAM 文件夹查找。改用二维码认证密码登录多次受阻时优先切换到q二维码方式绕开密码哈希与验证码链路。耐心等待小米账号服务存在每日 2FA 请求次数限制视区域不同为 3 次或 5 次超出限制后当天无法继续触发验证只能等待额度恢复。十一、Home Assistant 生态扩展项目作者还提供了与本文主题强相关的两个配套工具README 的Home Assistant additional tools一节可用于将提取到的数据进一步落地使用Map extractor小米云地图提取器为小米扫地机器人提供实时地图显示的自定义组件配合本工具拿到的 Token 使用Map card扫地机地图卡片一个 Lovelace 卡片支持从 Lovelace 界面手动控制扫地机器人。两者与本文主题的关系是本文提取的 Token 是这类自定义组件接入米家设备的必要前置条件——先用本文介绍的工具拿到 Token再配置对应的集成组件。十二、安全与使用须知工具在本地完成全部登录与请求过程凭据不会上传到任何第三方服务但请妥善保管输出文件尤其是-o导出的 JSON内含 Token 与 BLE 密钥设备 Token 属于敏感凭据泄漏后他人可能获得设备的本地控制权限请勿将其提交到公开仓库或公开分享工具基于小米云官方接口的私有协议实现小米可能调整接口行为若遇异常优先参考上文故障排查清单并将日志级别调至DEBUG观察具体失败环节。总结Xiaomi Cloud Tokens Extractor 通过模拟小米账号登录密码 / 二维码获取ssecurity与serviceToken再借助带 RC4 加密与签名机制的云 API 遍历服务器、家庭、设备三层结构最终输出每个设备的NAME、ID、MAC、IP、TOKEN、MODEL并为 BLE 设备额外抓取beaconkey。无论是 Home Assistant 玩家、智能家居开发者还是需要批量管理米家设备的自动化场景它都是一把开箱即用的钥匙。赞分享物联网开发工具【免费下载链接】Xiaomi-cloud-tokens-extractorThis tool retrieves tokens for all devices connected to Xiaomi cloud and encryption keys for BLE devices.项目地址https://gitcode.com/gh_mirrors/xia/Xiaomi-cloud-tokens-extractor点击查看免费下载相关推荐Xiaomi Cloud Tokens Extractor解锁小米云设备的秘密钥匙Xiaomi Cloud Tokens Extractor解锁小米云设备的秘密钥匙 项目介绍 在智能家居的浪潮中小米设备以其高性价比和智能化特性受到了广泛欢物联网开发工具如何轻松提取小米云设备令牌Xiaomi Cloud Tokens Extractor 完整指南如何轻松提取小米云设备令牌Xiaomi Cloud Tokens Extractor 完整指南 Xiaomi Cloud Tokens Extractor 是物联网开发工具Intrigue Core实战演练如何发现和修复常见Web应用安全漏洞Intrigue Core实战演练如何发现和修复常见Web应用安全漏洞 Intrigue Core 是一款功能强大的攻击面发现框架专门用于自动化发现和修复W上一篇终极窗口控制指南SRWE实时窗口编辑器完整教程下一篇如何在Photoshop中免费开启WebP格式支持WebPShop插件完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考