V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
najunuoyan
V2EX  ›  Apple

mac 连接小米手机大家试过吗

  •  
  •   najunuoyan · 34 天前 · 1790 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,mac 上面安装了小米互联服务,想试一下传说中的可以在 mac 上投屏并且控制手机的“妙享桌面”,但是一直没办法找到手机,连同一 wifi 试了,mac 连小米的热点也试了,一直是“当前暂无设备”,但是上面的“文件互传”是好的,小米手机的系统和相关软件都升级过了,mac 也是 15.3 的最新系统,有大佬能指点一下吗?

    第 1 条附言  ·  31 天前
    问题解决,11 楼和 21 楼给了方案,21 楼的兄弟还给了下载链接
    30 条回复    2025-03-11 08:23:31 +08:00
    luka77
        1
    luka77  
       34 天前

    这几个软件更新到这些版本,具体来源是这个帖子:https://www.coolapk.com/feed/61158411?shareKey=MjVjODJmYzM3Nzg5NjdhNWFkMjE
    najunuoyan
        2
    najunuoyan  
    OP
       34 天前
    @luka77 感谢回复,貌似知道问题点了,我的小米 15 升级到了最新的澎湃 OS2 ,应用商店提示“小米互联通信服务”未适配您的安卓版本,我来看看怎么解决
    najunuoyan
        3
    najunuoyan  
    OP
       34 天前
    @luka77
    ![]( )
    0x663
        4
    0x663  
       34 天前
    我的也是发现不了设备。
    najunuoyan
        5
    najunuoyan  
    OP
       34 天前
    @0x663 你看我 2 楼的回复,是不是一样的原因
    0x663
        6
    0x663  
       34 天前
    我的也是发现不了设备。
    @najunuoyan #5 不是,我搜索了手机里这些服务都更新到了最新版本了。
    najunuoyan
        7
    najunuoyan  
    OP
       34 天前
    @0x663 最新版本的兼容性会有点问题
    0x663
        8
    0x663  
       34 天前
    @najunuoyan #7 get ,等修复了。
    Rever4433
        9
    Rever4433  
       34 天前
    Hyper 更新微信小程序上下载最新版的互联互通服务就行了
    noyidoit
        10
    noyidoit  
       34 天前
    我 Mac 和你一样的情况,系统、软件、网络配置,折腾了 N 个版本都不行。但是 Windows 什么都不用折腾,只要安上小米电脑管家就能正常使用妙享桌面
    chax
        11
    chax  
       33 天前
    我很早就用了,Mac 互联共享 1.1.0 版本可以找到我的小米 13 澎湃 os2 ,升级 1.2.0 之后找不到。降级之后解决。所以找个 1.1.0 的小米互联共享试试
    najunuoyan
        12
    najunuoyan  
    OP
       33 天前
    @noyidoit 你的是小米电脑吗?
    najunuoyan
        13
    najunuoyan  
    OP
       33 天前
    @chax
    @noyidoit
    @0x663
    @Rever4433
    现在的问题是最新的系统自带的“小米互联通信服务”是 4.0.238.10 ,我通过 9 楼朋友提供的微信小程序更新到了 4.1.215.10 最新版,仍然不行。感觉应该回退一个大版本,就是 1 楼提到的 3.1.953.10 ,但是“小米互联通信服务”是系统服务,不能降级,只能通过手机管家卸载更新,也就是把 4.1.215.10 降回系统自带的 4.0.238.10 ,如果有朋友知道如何降级可以踢一下
    Leoking222
        14
    Leoking222  
       33 天前
    我昨天试过了,互联服务要升级到最新版,并且好像只支持小米 15
    najunuoyan
        15
    najunuoyan  
    OP
       33 天前
    @Leoking222 我就是小米 15 ,小米互联服务是 mac 的 appstore 上安装的 1.2.201 (157)版本,请问你是什么版本啊
    Leoking222
        16
    Leoking222  
       33 天前
    我是 1.2.0 ,最好去官网下载,而不要去 appstore 下载
    Leoking222
        17
    Leoking222  
       33 天前
    @najunuoyan 我是 1.2.0 ,最好去官网下载,而不要去 appstore 下载
    najunuoyan
        18
    najunuoyan  
    OP
       33 天前
    @Leoking222 我是官网的不行,然后去 app store 下载的,发现也不行
    noyidoit
        19
    noyidoit  
       33 天前
    @najunuoyan 不是,是鸡哥的某款 7840 笔记本,具体型号忘了
    noyidoit
        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
    0A0
        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
    ![9ziou6.png]( https://files.catbox.moe/9ziou6.png)
    Shadowalker0314
        22
    Shadowalker0314  
       33 天前 via Android
    哥几个,我用 appstore 的版本也是发现不了设备,后来用官网 dmg 版本可以了,有以下几个条件:
    1.不能开 lulu 防火墙(设置 app 放行规则无效,不知道他用了什么鬼协议)
    2.手机是澎湃 os2 以上(老版本咋更新,组件满足条件也不行)
    3.app 是官网版本,appstore 的用不了(不知道现在怎么样了,以前不行)
    najunuoyan
        23
    najunuoyan  
    OP
       31 天前
    @0A0 NB 兄弟,一步到位,可以了
    neptuno
        24
    neptuno  
       21 天前
    @0A0 #21 🐂🍺,退回 1.1 就好了
    jamesjammy061
        25
    jamesjammy061  
       3 天前
    能不能强制单播直连,公司网络禁止了组播
    jamesjammy061
        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 ,剩下的流程走单播,这样就能通了
    jamesjammy061
        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}'}

    ```
    jamesjammy061
        28
    jamesjammy061  
       2 天前
    强制诱骗感觉不太行,wireshark 捕获包之后重复都无法触发,估计还会有单播包的心跳或者校验包
    jamesjammy061
        29
    jamesjammy061  
       2 天前
    剩下的办法可能就是看下能不能 hook 他的启动函数了,直接入参过去调用
    najunuoyan
        30
    najunuoyan  
    OP
       2 天前
    @jamesjammy061 兄弟 NB 啊,加油加油,争取破解掉它的协议
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.