如题,mac 上面安装了小米互联服务,想试一下传说中的可以在 mac 上投屏并且控制手机的“妙享桌面”,但是一直没办法找到手机,连同一 wifi 试了,mac 连小米的热点也试了,一直是“当前暂无设备”,但是上面的“文件互传”是好的,小米手机的系统和相关软件都升级过了,mac 也是 15.3 的最新系统,有大佬能指点一下吗?
![]() |
1
luka77 34 天前
|
2
najunuoyan OP @luka77 感谢回复,貌似知道问题点了,我的小米 15 升级到了最新的澎湃 OS2 ,应用商店提示“小米互联通信服务”未适配您的安卓版本,我来看看怎么解决
|
3
najunuoyan OP |
![]() |
4
0x663 34 天前
我的也是发现不了设备。
|
5
najunuoyan OP @0x663 你看我 2 楼的回复,是不是一样的原因
|
![]() |
6
0x663 34 天前
我的也是发现不了设备。
@najunuoyan #5 不是,我搜索了手机里这些服务都更新到了最新版本了。 |
7
najunuoyan OP @0x663 最新版本的兼容性会有点问题
|
![]() |
8
0x663 34 天前
@najunuoyan #7 get ,等修复了。
|
9
Rever4433 34 天前
Hyper 更新微信小程序上下载最新版的互联互通服务就行了
|
![]() |
10
noyidoit 34 天前
我 Mac 和你一样的情况,系统、软件、网络配置,折腾了 N 个版本都不行。但是 Windows 什么都不用折腾,只要安上小米电脑管家就能正常使用妙享桌面
|
![]() |
11
chax 33 天前
我很早就用了,Mac 互联共享 1.1.0 版本可以找到我的小米 13 澎湃 os2 ,升级 1.2.0 之后找不到。降级之后解决。所以找个 1.1.0 的小米互联共享试试
|
12
najunuoyan OP @noyidoit 你的是小米电脑吗?
|
13
najunuoyan OP |
![]() |
14
Leoking222 33 天前
我昨天试过了,互联服务要升级到最新版,并且好像只支持小米 15
|
15
najunuoyan OP @Leoking222 我就是小米 15 ,小米互联服务是 mac 的 appstore 上安装的 1.2.201 (157)版本,请问你是什么版本啊
|
![]() |
16
Leoking222 33 天前
我是 1.2.0 ,最好去官网下载,而不要去 appstore 下载
|
![]() |
17
Leoking222 33 天前
@najunuoyan 我是 1.2.0 ,最好去官网下载,而不要去 appstore 下载
|
18
najunuoyan OP @Leoking222 我是官网的不行,然后去 app store 下载的,发现也不行
|
![]() |
19
noyidoit 33 天前
@najunuoyan 不是,是鸡哥的某款 7840 笔记本,具体型号忘了
|
![]() |
20
noyidoit 33 天前
@Leoking222 刚试过,去[官网]( https://mijia-ios-adhoc.cnbj1.mi-fds.com/mijia-ios-adhoc/hyperconnect/HyperConnect.dmg)下了小米互联服务(1.2.0, 508),也不行。电脑 Macbook Air M2, MacOS 15.3 ,手机小米 15 ,HyperOS 2.0.101.0 ,互联互通服务 16.2.2.0.2412302115 ,小米互联通信服务 4.0.238.10 。我觉得不是手机这边的问题,毕竟同一部手机,我在 Windows 上可以正常使用(甚至不是小米官方支持的电脑),而 Mac 上是完全不可用。
附两张图 https://imgur.com/VWxCqjm https://imgur.com/kC02AWp |
21
0A0 33 天前
@najunuoyan
解决了。 你的思路错了,跟小米互联通信服务版本号无关,我从 3.1 到最新的 4.1 都尝试了还是无法连接。 原因是 mac 客户端 1.2.0 开始故意限制了老机型强开使用。广播的 mdns 没问题但客户端拒绝连接。 使用老版本的 1.1.0 可恢复。有人 1.2.0 也可以但我这边不行而且也不是老机型。感觉是机型限制设置出问题了。 给你个 1.1.0 的你试试应该可以用了。 https://drive.google.com/file/d/1UAbYxlxhqqsvhTXbGRYHMDSABLBf9jV7/edit?pli=1  |
![]() |
22
Shadowalker0314 33 天前 via Android
哥几个,我用 appstore 的版本也是发现不了设备,后来用官网 dmg 版本可以了,有以下几个条件:
1.不能开 lulu 防火墙(设置 app 放行规则无效,不知道他用了什么鬼协议) 2.手机是澎湃 os2 以上(老版本咋更新,组件满足条件也不行) 3.app 是官网版本,appstore 的用不了(不知道现在怎么样了,以前不行) |
23
najunuoyan OP @0A0 NB 兄弟,一步到位,可以了
|
25
jamesjammy061 3 天前
能不能强制单播直连,公司网络禁止了组播
|
26
jamesjammy061 2 天前
找到了一些端倪,
wireshark 抓包显示,过滤所有组播 ip `ip.dst >= 224.0.0.0 and ip.dst <= 239.255.255.255` ```log Standard query response 0x0000 PTR, cache flush Android.local PTR, cache flush Android.local A, cache flush 192.168.136.46 AAAA, cache flush fe80::30b8:51ff:fe17:4903 NSEC, cache flush 46.136.168.192.in-addr.arpa NSEC, cache flush 3.0.9.4.7.1.E.F.F.F.1.5.8.B.0.3.0.0.0.0.0.0.0.0.0.0.0.0.0.8.E.F.ip6.arpa NSEC, cache flush Android.local Standard query 0x0000 PTR _mi-connect._udp.local, "QU" question Standard query 0x0000 PTR _lyra-mdns._udp.local, "QU" question ``` 里面好像可以看到三个 mDNS 的类型,`_mi-connect._udp.local`、`_lyra-mdns._udp.local`、`Android.local` 然后直接用 macOS 自带的命令查了一下 `dns-sd -B _lyra-mdns._udp local` 只有 `_lyra-mdns` 这个有数据 ```log ❯ dns-sd -B _lyra-mdns._udp local Browsing for _lyra-mdns._udp.local DATE: ---Mon 10 Mar 2025--- 21:40:02.665 ...STARTING... Timestamp A/R Flags if Domain Service Type Instance Name 21:40:06.193 Add 2 17 local. _lyra-mdns._udp. 3F2E52BE 21:41:11.105 Rmv 0 17 local. _lyra-mdns._udp. 3F2E52BE ``` 然后继续看下它广播了什么东西 `dns-sd -L "3F2E52BE" _lyra-mdns._udp local.` ```log ❯ dns-sd -L "3F2E52BE" _lyra-mdns._udp local. Lookup 3F2E52BE._lyra-mdns._udp.local. DATE: ---Mon 10 Mar 2025--- 21:42:45.657 ...STARTING... 21:42:47.422 3F2E52BE._lyra-mdns._udp.local. can be reached at 3F2E52BE.local.:5353 (interface 17) AppData=AkEBPy5Svug7AAIBDwoDAYNPAQEgAhlNYXR0aGV3IFBlcmV655qEUmVkbWkgSzUwIwAjAr+Q MediumType=64 DebugInfo=\{msg:hello,\ ifname:ap0,\ v4:192.\$\)+.\$\&\).46,\ v6:fe80::\&#\<+:\(\$@@:@\?\$\*:4903\} ``` 这里 ip 是打了掩码的,不过最后 46 确实是我的手机 `192.\$\)+.\$\&\).46` 解开 `AppData` 的 base64 ,`echo xxx | base64 -d | xxd`,显示 ``` 00000000: 0241 013f 2e52 bee8 3b00 0201 0f0a 0301 .A.?.R..;....... 00000010: 834f 0101 2002 194d 6174 7468 6577 2050 .O.. ..Matthew P 00000020: 6572 657a e79a 8452 6564 6d69 204b 3530 erez...Redmi K50 00000030: 2300 2302 bf90 #.#... ``` 可以看到确实是我的手机,估计前后缀除了定界符,还有一些小米自己的私有信息 用 `dns-sd -G v4v6 3F2E52BE.local.` 就可以查到具体 ip 了 ```log ❯ dns-sd -G v4v6 3F2E52BE.local. DATE: ---Mon 10 Mar 2025--- 21:44:03.917 ...STARTING... Timestamp A/R Flags IF Hostname Address TTL 21:44:06.260 Add 3 17 3F2E52BE.local. 192.168.136.46 120 ``` 然后 Google 了一下,在 eu 小米论坛找到了这个 [日志]( https://xiaomi.eu/community/attachments/log_fuxi_v816-0-23-12-4-dev-txt.50276/) 里面也有一行提到了 ```log 12-12 03:16:46.265 10471 25415 W lyra-mdns-core: query _lyra-mdns._udp.local[0C] timeout! ``` --- 我在想,能不能伪造这个东西,搞个 mDNS 诱骗器之类的,向 loopback 发这个 mDNS 广播,让小米互联、Xcode debug remote 之类的 app 发现这个设备,然后解析出具体 ip ,剩下的流程走单播,这样就能通了 |
27
jamesjammy061 2 天前
python 代码如下
```py #!/usr/bin/env python3 from zeroconf import ServiceBrowser, Zeroconf import time import socket from typing import List, Dict, Optional class MDNSListener: def __init__(self): self.services: Dict[str, Dict] = {} def remove_service(self, zeroconf: Zeroconf, type_: str, name: str) -> None: print(f"服务被移除: {name}") if name in self.services: del self.services[name] def add_service(self, zeroconf: Zeroconf, type_: str, name: str) -> None: info = zeroconf.get_service_info(type_, name) if info: addresses = [socket.inet_ntoa(addr) for addr in info.addresses] self.services[name] = { 'name': name, 'type': type_, 'addresses': addresses, 'port': info.port, 'server': info.server, 'properties': info.properties } print(f"发现新服务: {name}") print(f" 地址: {', '.join(addresses)}") print(f" 端口: {info.port}") print(f" 服务器: {info.server}") def update_service(self, zeroconf: Zeroconf, type_: str, name: str) -> None: print(f"服务更新: {name}") self.add_service(zeroconf, type_, name) def discover_services(duration: int = 5) -> Dict[str, Dict]: """发现本地网络中的所有 mDNS 服务""" zeroconf = Zeroconf() listener = MDNSListener() # 常见的服务类型 service_types = [ # "_http._tcp.local.", # "_https._tcp.local.", # "_workstation._tcp.local.", # "_printer._tcp.local.", # "_ipp._tcp.local.", # "_airplay._tcp.local.", # "_spotify-connect._tcp.local.", # "_googlecast._tcp.local.", # "_googlecast._tcp.local.", "_mi-connect._udp.local.", "_lyra-mdns._udp.local.", ] browsers = [ServiceBrowser(zeroconf, service_type, listener) for service_type in service_types] try: print(f"正在扫描 mDNS 服务,持续{duration}秒...") time.sleep(duration) finally: zeroconf.close() return listener.services def query_service_details(service_name: str, service_type: str) -> Optional[Dict]: """查询特定服务的详细信息""" zeroconf = Zeroconf() try: info = zeroconf.get_service_info(service_type, service_name) if info: addresses = [socket.inet_ntoa(addr) for addr in info.addresses] return { 'name': service_name, 'type': service_type, 'addresses': addresses, 'port': info.port, 'server': info.server, 'properties': {k.decode(): v.decode() if isinstance(v, bytes) else v for k, v in info.properties.items()} } finally: zeroconf.close() return None def main(): # 1. 发现所有服务 print("开始扫描本地网络中的 mDNS 服务...") services = discover_services(10) # 扫描 10 秒 # 2. 显示所有发现的服务 print("\n 发现的所有服务:") for name, service in services.items(): print(f"\n 服务名称: {name}") print(f"服务类型: {service['type']}") print(f"IP 地址: {', '.join(service['addresses'])}") print(f"端口: {service['port']}") print(f"服务器: {service['server']}") # 3. 如果发现了服务,查询第一个服务的详细信息 if services: first_service = next(iter(services.items())) name, service = first_service print(f"\n 获取服务 '{name}' 的详细信息:") details = query_service_details(name, service['type']) if details: print("详细信息:") print(f"属性: {details['properties']}") else: print("无法获取详细信息") else: print("\n 未发现任何服务") if __name__ == "__main__": main() ``` 响应结果 ``` ❯ python mdns_discovery.py 开始扫描本地网络中的 mDNS 服务... 正在扫描 mDNS 服务,持续 10 秒... 发现新服务: 3F2E52BE._lyra-mdns._udp.local. 地址: 192.168.136.46 端口: 5353 服务器: 3F2E52BE.local. 服务更新: 3F2E52BE._lyra-mdns._udp.local. 发现新服务: 3F2E52BE._lyra-mdns._udp.local. 地址: 192.168.136.46 端口: 5353 服务器: 3F2E52BE.local. 发现的所有服务: 服务名称: 3F2E52BE._lyra-mdns._udp.local. 服务类型: _lyra-mdns._udp.local. IP 地址: 192.168.136.46 端口: 5353 服务器: 3F2E52BE.local. 获取服务 '3F2E52BE._lyra-mdns._udp.local.' 的详细信息: 详细信息: 属性: {'AppData': 'AkEBPy5Svug7AAIBDwoDAYNPAQEgAhlNYXR0aGV3IFBlcmV655qEUmVkbWkgSzUwIwAjAr+Q', 'MediumType': '64', 'DebugInfo': '{msg:reply, ifname:ap0, v4:192.$)+.$&).46, v6:fe80::&#<+:($@@:@?$*:4903}'} ``` |
28
jamesjammy061 2 天前
强制诱骗感觉不太行,wireshark 捕获包之后重复都无法触发,估计还会有单播包的心跳或者校验包
|
29
jamesjammy061 2 天前
剩下的办法可能就是看下能不能 hook 他的启动函数了,直接入参过去调用
|
30
najunuoyan OP @jamesjammy061 兄弟 NB 啊,加油加油,争取破解掉它的协议
|