yksoft1ex
V2EX  ›  问与答

B 站客户端是如何检测“当前网络可能是收费 WIFI(移动网络)”的?

  •  
  •   yksoft1ex · Apr 22, 2019 · 6193 views
    This topic created in 2610 days ago, the information mentioned may be changed or developed.
    我觉得可能是检测机子 IP 段,比如 192.168.43.x (安卓的网络共享)、172.20.10.x ( iOS 的网络共享)等。使用专用的 mifi 之类设备,就检测不出了。
    21 replies    2019-07-15 08:04:26 +08:00
    leafre
        1
    leafre  
       Apr 22, 2019
    我觉得跟你觉得一样
    Tianao
        2
    Tianao  
       Apr 22, 2019 via iPhone
    我猜是根据 SSID 的个人热点属性。
    binux
        3
    binux  
       Apr 22, 2019   ❤️ 2
    因为连上 wifi 的时候,wifi 就会告诉你,它自己是个无线热点( portable hotspot )。
    yksoft1ex
        4
    yksoft1ex  
    OP
       Apr 22, 2019
    @Tianao 这个数据在 Android 的 Java 层里能获得?
    gramyang
        5
    gramyang  
       Apr 22, 2019 via Android
    你问这个问题肯定是没有 google 过的,安卓自带接口可以检查当前网络是 2g 还是 3g 还是 4g 还是 wifi
    passerbytiny
        6
    passerbytiny  
       Apr 22, 2019
    这东西难道不是系统提供的吗,而且还很有可能不是主动检测而是事件监听。

    而且也不一定要客户端检测,服务器也可以检测到之后再推送给客户端。
    lion9527
        7
    lion9527  
       Apr 22, 2019
    我感觉这个属于自作聪明的过度设计,也没有关闭的选项,非常恶心人。
    yksoft1ex
        8
    yksoft1ex  
    OP
       Apr 22, 2019
    @Tianao 好像还真能,3x0 的奇酷 UI 的 SystemUI 就能显示 Wifi 属于安卓和 iOS 热点。但是奇怪的是,iOS 能识别 iOS 共享的热点,却不识别安卓共享出的热点。
    @binux 然后如果是安卓的话如何修改其分享出热点的 IP、DHCP 的 IP 池,以及使其不声明自己是热点?
    shehuizhuyi
        9
    shehuizhuyi  
       Apr 22, 2019
    @gramyang 是连接 wifi 之后 提示可能是收费 wifi
    binux
        10
    binux  
       Apr 22, 2019
    @yksoft1ex #7 反正 MIUI 是可以设置 device identification 的,还有 iOS 当然能识别安卓的共享热点。
    yksoft1ex
        11
    yksoft1ex  
    OP
       Apr 22, 2019
    @binux 至少 SpringBoard 上,安卓共享的热点是不会显示那个回形针标志的。
    yksoft1ex
        12
    yksoft1ex  
    OP
       Apr 22, 2019
    @binux ConnectivityManager.isActiveNetworkMetered() 能获得当前连接的热点是否被用户自己设置为计费 Wifi,但没说这个属性能被自动检测出来。
    whileFalse
        13
    whileFalse  
       Apr 22, 2019
    如果能获得路由器 mac 地址,可以根据这些 mac 地址反查对应的设备提供商。
    love4taylor
        14
    love4taylor  
    PRO
       Apr 22, 2019
    Android 本身是有自动识别计费 WiFi 功能的. 或许看看 AOSP 相关部分?
    0x4F5DA2
        15
    0x4F5DA2  
       Apr 22, 2019 via iPhone
    安卓 SDK 里有接口,网络变动还有事件可以监听
    yksoft1ex
        16
    yksoft1ex  
    OP
       Apr 22, 2019
    @whileFalse 这个要求定位权限吧?另外,很多山寨的安卓机里面各种信息包括 IMEI、MAC 都是可以改的。

    @0x4F5DA2
    @Love4Taylor ConnectivityManager.isActiveNetworkMetered() 能获得当前连接的热点是否被用户自己设置为计费 Wifi,但没说这个属性能被系统自动检测出来。
    nanaw
        17
    nanaw  
       Apr 22, 2019 via Android
    @whileFalse 说到 mac 地址,都 9102 年了 Android P 应用居然还可以不需要权限取得本机 mac,真不知道 Google 是怎么想的
    nanaw
        19
    nanaw  
       Apr 23, 2019 via Android   ❤️ 1
    @phy25 装个 devcheck 自己看能不能获取到。 权限接口封过但 Java 层还能获取
    catalina
        20
    catalina  
       Apr 23, 2019 via Android
    不不不,不太对,并不是读取的“是 wifi 还是 xg 还是移动热点”。
    我在一个收费 wifi(不是蜂窝数据这类的,是我们学校的公共热点,每个月流量有限,ip172.20.18.0/24)下使用 b 站,它还是会弹出来“可能是收费 wifi ”。
    appops 检测到了它使用了 wifi_scan 权限。但禁止后重启 b 站 app,它还是提示了,所以也不是这个。
    话说,番剧页面就没有这个提示哎?
    luckycatio
        21
    luckycatio  
       Jul 15, 2019 via Android
    @binux 他把我家的 wifi 识别成了收费 wifi,我家的 ip 端是 10.0.0.1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2997 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 03:31 · PVG 11:31 · LAX 20:31 · JFK 23:31
    ♥ Do have faith in what you're doing.