• 请不要在回答技术问题时复制粘贴 AI 生成的内容
estk
V2EX  ›  程序员

App 端判断是否是大陆用户的最简洁方式,无需 IP 库

  •  
  •   estk · Nov 20, 2022 · 16345 views
    This topic created in 1450 days ago, the information mentioned may be changed or developed.

    React Native 为例:

    useEffect(()=>{
      let mainLand = true
      axios(
        'http://google.com',
        {method: 'head', timeout: 10_000}
      ).then(({status})=>{
        if (200===status) {
          mainLand = false
        }
      }).catch(()=>{})
    }, [])
    
    92 replies  •  2022-11-22 07:32:34 +08:00
    dcty
    dcty
    Nov 20, 2022 via Android❤️1
    1
    😬 虽然,但是,算了,就酱。
    ByteRan
    ByteRan
    Nov 20, 2022
    2
    延迟有点高
    QKgf555H87Fp0cth
    QKgf555H87Fp0cth
    Nov 20, 2022
    3
    不错,客户刚进来的时候就开启尝试
    ilstr
    ilstr
    Nov 20, 2022
    4
    这难道不是在对 GFW 做攻击?
    0o0O0o0O0o
    0o0O0o0O0o
    Nov 20, 2022 via iPhone
    5
    老梗但并不过时
    shawndev
    shawndev
    Nov 20, 2022
    6
    不够快也不够准,所以为什么不用 locale 判断
    Jooooooooo
    Jooooooooo
    Nov 20, 2022
    8
    这其实是没想清楚你要这个判断来干嘛

    很显然 大陆用户(先不说这个定义是什么) 和 访问 google.com 会在一定时间内超时 是两回事

    回到原始的需求, 判断 大陆用户 来做什么呢?
    dcsuibian
    dcsuibian
    Nov 20, 2022
    9
    const res=window.confirm('将地区设为中国大陆?')
    agagega
    agagega
    Nov 20, 2022
    10
    你先得定义一下大陆用户是什么意思。不过我倒是合理怀疑国产软件会通过给这些域名发请求来判断当前用户是不是在代理状态
    MIUIOS
    MIUIOS
    Nov 20, 2022
    11
    你这如果挂了 VPN 就能绕过了,一般都会绕过大陆 IP , 更好的方案是搞一个被墙的 IP , 直接 ping 一下即可,也不需要走 http 太慢了
    MrKrabs
    MrKrabs
    Nov 20, 2022
    12
    你这会不会害人啊
    Alexf4
    Alexf4
    Nov 20, 2022
    13
    @ragnaroks +1 ,实用
    hash
    hash
    Nov 20, 2022❤️25
    14
    典型的外包项目能蒙混过关的错误答案
    Pastsong
    Pastsong
    Nov 20, 2022 via Android
    15
    那你至少要等个连接超时的时间吧
    zhangshine
    zhangshine
    Nov 20, 2022
    16
    10_000 第一次知道还有这种写法
    rb6221
    rb6221
    Nov 20, 2022
    17
    小项目还真能用,不过也就是能用罢了
    arischow
    arischow
    Nov 20, 2022 via iPhone
    18
    😅
    shawndev
    shawndev
    Nov 20, 2022
    19
    Hosts 就可以
    xingstar
    xingstar
    Nov 20, 2022
    20
    这个方法挺骚操作的啊,涨知识了😂
    tf2
    tf2
    Nov 20, 2022
    21
    你这访问的是 http ?

    我直接 hosts 改得飞起。
    YY
    YY
    Nov 20, 2022
    22
    dns 劫持呢
    wellerman
    wellerman
    Nov 20, 2022
    23
    哈哈哈 可以,又不是不能用。
    qingmuhy0
    qingmuhy0
    Nov 20, 2022 via iPhone❤️3
    24
    把网址换成 lun 子是不是正确率更高,这样子伊朗什么的也不会获得中国国籍。
    spicy777
    spicy777
    Nov 20, 2022
    25
    <a href="javascript:alert('清除成功');">清除缓存</a>
    yaott2020
    yaott2020
    Nov 20, 2022 via Android❤️14
    26
    @ragnaroks 用 cf 国内站更好: https://cf-ns.com/cdn-cgi/trace
    LZSZ
    LZSZ
    Nov 20, 2022
    27
    时区 运营商
    lang1pal
    lang1pal
    Nov 20, 2022
    28
    有墙的好像不仅仅只有大陆
    makelove
    makelove
    Nov 20, 2022
    29
    既然是这种方法,那 ping 政 x 府网站延迟低这个方法比这个快速一点
    docx
    docx
    Nov 20, 2022 via iPhone❤️2
    30
    @ragnaroks @yaott2020 这样本质上还是用了 cf 的 geoip 库
    blankmiss
    blankmiss
    Nov 20, 2022
    31
    确实直接取时区 会不会更好一点
    chinalawme
    chinalawme
    Nov 20, 2022
    32
    成功访问 http://google.com 会返回 301 ,跳转到 HTTPS 地址,怎么是 200 呢?
    yusteven
    yusteven
    Nov 20, 2022 via iPhone
    33
    经典,但是有效
    fisherwei
    fisherwei
    Nov 20, 2022
    34
    @chinalawme 我也想说这个问题
    wonderfulcxm
    wonderfulcxm
    Nov 20, 2022 via iPhone
    35
    哈哈,这个思路可以
    estk
    estk
    OP
    Nov 20, 2022 via Android
    36
    @chinalawme #32
    实践中真是 200 ,我估计 axios 自动跳转,直到最后一层不用跳才停
    estk
    estk
    OP
    Nov 20, 2022 via Android
    37
    @chinalawme #32
    不过你提醒我了,这样跳效率更差
    estk
    estk
    OP
    Nov 20, 2022 via Android
    38
    @Pastsong #15
    所以 mainLand 变量默认 true ,超时说明他就是打不开谷歌
    yaott2020
    yaott2020
    Nov 20, 2022 via Android
    39
    @docx 这是站点直接返回的客户端地址,和 geoip 无关
    yaott2020
    yaott2020
    Nov 20, 2022 via Android❤️1
    40
    @docx 如果说是 loc 的话,确实。你可以用 ip 字段自己请求其他的 geoip api
    estk
    estk
    OP
    Nov 20, 2022 via Android
    41
    @lang1pal #28
    那种地区在我看来也是“大陆”
    jinliming2
    jinliming2
    Nov 20, 2022 via iPhone
    42
    @zhangshine #16 这是 ES2021 的新语法糖 Numeric Separators ,Chrome 75 开始支持
    WinkeyLin
    WinkeyLin
    Nov 20, 2022❤️1
    43
    慕名而来,都能上 V2EX 了为什么会想出这种方法
    Keanuo
    Keanuo
    Nov 20, 2022
    44
    有用,且幽默
    cvbnt
    cvbnt
    Nov 20, 2022 via Android
    45
    我怀疑你想 ddos gfw ,但我没有证据
    aladdinding
    aladdinding
    Nov 20, 2022
    46
    http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 看 IP 就行

    根据这个生一个排序好的 IP 地址,直接二分查找就行 log(n)
    mofe
    mofe
    Nov 20, 2022 via iPhone❤️5
    47
    发现这俩一起用甚至能检测是否用了代理……
    https://www.cloudflare.com/cdn-cgi/trace
    https://cf-ns.com/cdn-cgi/trace
    用了代理返回结果不一样……
    alexmy
    alexmy
    Nov 20, 2022
    48
    盲目猜测,应该是产品不对大陆开放吧?比如 小说 app?
    teenight
    teenight
    Nov 20, 2022 via iPhone
    50
    能用,有效,赞一个
    bs10081
    bs10081
    Nov 20, 2022
    51
    remember5
    remember5
    Nov 20, 2022
    52
    @mofe #47 一样,两次访问检测的 ip 不一样
    VYSE
    VYSE
    Nov 20, 2022 via Android
    53
    @estk 关了 follow redirect ,这样就多跳了个 http
    Terminl
    Terminl
    Nov 21, 2022
    54
    离谱
    natsukage
    natsukage
    Nov 21, 2022 via iPhone❤️1
    55
    什么主播女孩重度依赖(汗)
    TaurusXin
    TaurusXin
    Nov 21, 2022 via iPhone
    56
    实用性不高 像我这种 24 小时开着分流代理的 就没用了
    baobao1270
    baobao1270
    Nov 21, 2022❤️1
    57
    @shawndev 因为用 locale 不优雅。

    很多程序员都假设“世界上只有一个时区”、“世界上只有两种 locale”,导致了很多 bug
    WildCat
    WildCat
    Nov 21, 2022
    58
    @Jooooooooo 网络安全法,个人信息保护法。
    sunorg
    sunorg
    Nov 21, 2022 via Android
    59
    estk
    estk
    OP
    Nov 21, 2022 via Android
    60
    @xinge666 #56
    这类用户在我看来就不是“大陆用户”
    KuroNekoFan
    KuroNekoFan
    Nov 21, 2022
    61
    这种伪代码至少 5 年前就见过
    S179276SP
    S179276SP
    Nov 21, 2022
    62
    @lang1pal 屏蔽谷歌搜索的还真就只有大陆,土库曼斯坦都能打开
    wobuhuicode
    wobuhuicode
    Nov 21, 2022
    63
    几年前的代码就用这个判断了。后来嫌这个判断需要等待太久。
    就把 APP 分成了两个,google play 上一个,国内上一个。进入 App ,0 延迟判断。
    huangqihong
    huangqihong
    Nov 21, 2022
    64
    tiktok 我安装后,即使挂了火箭,还是不行,非要下了 sim 卡才行,平板就好多了
    hervey0424
    hervey0424
    Nov 21, 2022
    65
    完了, 我不是大陆用户了
    TWorldIsNButThis
    TWorldIsNButThis
    Nov 21, 2022 via iPhone
    66
    @zhangshine 看过不少国外的示例代码里这么写 比较符合英语的习惯
    codehz
    codehz
    Nov 21, 2022❤️2
    67
    最简单的方法就是判断 sim 卡地区呀,没 sim 卡就当作模拟器,模拟 sim 卡地区可麻烦了,至少能挡掉一大堆人
    xiaojun1994
    xiaojun1994
    Nov 21, 2022
    68
    我要是开了 vpn 呢
    foursking
    foursking
    Nov 21, 2022
    69
    你觉得自己很幽默吗
    estk
    estk
    OP
    Nov 21, 2022 via Android
    70
    @xiaojun1994 #68
    这种情况你打开淘宝也是海外版界面
    xuelu520
    xuelu520
    Nov 21, 2022
    71
    请求超时时间太长了,直接解析 DNS 吧,速度快很多。
    Jooooooooo
    Jooooooooo
    Nov 21, 2022
    72
    @WildCat 那用梯子的用户岂不是被漏过去了. 违法了呀.
    starXx
    starXx
    Nov 21, 2022
    73
    公司是可以申请外网访问的,ip 还是正常的省份;算了,还是一楼说得对
    estk
    estk
    OP
    Nov 21, 2022
    74
    @Jooooooooo #72
    能出墙的用户我们一般都不当做“大陆用户”
    S179276SP
    S179276SP
    Nov 21, 2022
    75
    @starXx 你访问外网的 IP ,还是在 CNNIC 下的大陆 IP 地址么?
    www.v2ex.com/t/836788
    sherlockwhite
    sherlockwhite
    Nov 21, 2022❤️1
    76
    其实就是有能力访问谷歌的认作自由世界的用户,不能访问谷歌的就不是我们用户
    sherlockwhite
    sherlockwhite
    Nov 21, 2022
    77
    你们会默认走系统代理嘛,
    shawndev
    shawndev
    Nov 21, 2022
    78
    @baobao1270 难道能不能访问谷歌作为单一维度就准确且优雅了?笑话。
    AlphaTauriHonda
    AlphaTauriHonda
    Nov 21, 2022 via iPhone
    79
    @S179276SP 🧱内的 IP 不过🧱有挺多的。我发过不少。
    再发一些,大部分地理位置都在🧱内。
    113.21.238.1 116.214.132.1 211.147.79.1 103.204.72.1 222.126.128.1 220.231.32.1 218.96.64.1 43.225.84.1 103.98.125.1 118.26.96.1 103.98.248.1 211.151.207.1 43.254.64.1 43.229.142.1 123.49.242.1
    Jooooooooo
    Jooooooooo
    Nov 21, 2022
    80
    @estk 和法务确认过说这么做合规吗?
    AlphaTauriHonda
    AlphaTauriHonda
    Nov 21, 2022 via iPhone
    81
    上面这些 IP 属于大陆,Cloudflare 的 loc 也应该是 cn ,不过这些 IP 能访问 Google ,而且它们连接墙内墙外都不会过墙。
    所以用这些 IP 上网的人属于大陆用户吗?
    x1aoYao
    x1aoYao
    Nov 21, 2022
    82
    @aladdinding 嗯。我用 rust 写过一个根据这 5 大 RIR 公开数据,解析成一个区间树(底层就是 B-Tree),用来查找 IP 对应的国家 /地区代码
    https://github.com/bnyu/ip2c
    lisxour
    lisxour
    Nov 21, 2022
    83
    @mofe 不一样只是因为你只代理了非大陆网站。。。
    gujuji
    gujuji
    Nov 21, 2022 via iPhone
    84
    @zhangshine 这个是啥意思啊,没看懂 10-1000
    zhangtest
    zhangtest
    Nov 21, 2022
    85
    写代码也得符合特色国情,这种方式是中国人特权,应该推广开来,让其他国家羡慕一下。
    zhangshine
    zhangshine
    Nov 21, 2022
    86
    @gujuji 看 #42 , 新的语法糖,增加可读性
    Radom
    Radom
    Nov 21, 2022
    87
    这个确实很牛。
    gujuji
    gujuji
    Nov 21, 2022 via iPhone
    88
    @zhangshine 想起来了,想起来了哈哈哈,
    CaptainD
    CaptainD
    Nov 21, 2022
    89
    我不能访问 Google = 我在大陆
    allenzhangSB
    allenzhangSB
    Nov 21, 2022
    90
    我为什么要点进这个帖子
    muhuan
    muhuan
    Nov 21, 2022
    91
    curl -L ip.tool.lu
    yanheqi
    yanheqi
    Nov 22, 2022 via iPhone
    92
    这和 clash for Windows 检测网络联通性的测速网址有什么区别呢? https://ybfl.xyz/202.html
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4714 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 259ms · UTC 03:19 · PVG 11:19 · LAX 19:19 · JFK 22:19
    ♥ Do have faith in what you're doing.