V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yksoft1ex
V2EX  ›  问与答

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

  •  
  •   yksoft1ex · 2019-04-22 10:41:08 +08:00 · 5658 次点击
    这是一个创建于 2042 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我觉得可能是检测机子 IP 段,比如 192.168.43.x (安卓的网络共享)、172.20.10.x ( iOS 的网络共享)等。使用专用的 mifi 之类设备,就检测不出了。
    21 条回复    2019-07-15 08:04:26 +08:00
    leafre
        1
    leafre  
       2019-04-22 11:11:12 +08:00
    我觉得跟你觉得一样
    Tianao
        2
    Tianao  
       2019-04-22 11:13:43 +08:00 via iPhone
    我猜是根据 SSID 的个人热点属性。
    binux
        3
    binux  
       2019-04-22 11:14:56 +08:00   ❤️ 2
    因为连上 wifi 的时候,wifi 就会告诉你,它自己是个无线热点( portable hotspot )。
    yksoft1ex
        4
    yksoft1ex  
    OP
       2019-04-22 11:15:20 +08:00
    @Tianao 这个数据在 Android 的 Java 层里能获得?
    gramyang
        5
    gramyang  
       2019-04-22 11:17:13 +08:00 via Android
    你问这个问题肯定是没有 google 过的,安卓自带接口可以检查当前网络是 2g 还是 3g 还是 4g 还是 wifi
    passerbytiny
        6
    passerbytiny  
       2019-04-22 11:17:33 +08:00
    这东西难道不是系统提供的吗,而且还很有可能不是主动检测而是事件监听。

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

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