yksoft1ex
V2EX  ›  问与答

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

  •  
  •   yksoft1ex · Apr 22, 2019 · 6476 views
    This topic created in 2753 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
    leafre
    Apr 22, 2019
    1
    我觉得跟你觉得一样
    Tianao
    Tianao
    Apr 22, 2019 via iPhone
    2
    我猜是根据 SSID 的个人热点属性。
    binux
    binux
    Apr 22, 2019❤️2
    3
    因为连上 wifi 的时候,wifi 就会告诉你,它自己是个无线热点( portable hotspot )。
    yksoft1ex
    yksoft1ex
    OP
    Apr 22, 2019
    4
    @Tianao 这个数据在 Android 的 Java 层里能获得?
    gramyang
    gramyang
    Apr 22, 2019 via Android
    5
    你问这个问题肯定是没有 google 过的,安卓自带接口可以检查当前网络是 2g 还是 3g 还是 4g 还是 wifi
    passerbytiny
    passerbytiny
    Apr 22, 2019
    6
    这东西难道不是系统提供的吗,而且还很有可能不是主动检测而是事件监听。

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

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