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

讨论 未结 90 35
estk
estk 会员 2022年11月20日 10:07 发表
<p>React Native 为例:</p> <pre><code>useEffect(()=&gt;{ let mainLand = true axios( 'http://google.com', {method: 'head', timeout: 10_000} ).then(({status})=&gt;{ if (200===status) { mainLand = false } }).catch(()=&gt;{}) }, []) </code></pre>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
90个回复
  • dcty
    2022年11月20日 10:07
    😬 虽然,但是,算了,就酱。
    0 0
  • likunyan
    2022年11月20日 10:07
    不错,客户刚进来的时候就开启尝试
    0 0
  • ilstr
    2022年11月20日 10:07
    这难道不是在对 GFW 做攻击?
    0 0
  • shawndev
    2022年11月20日 10:07
    不够快也不够准,所以为什么不用 locale 判断
    0 0
  • Jooooooooo
    2022年11月20日 10:37
    这其实是没想清楚你要这个判断来干嘛 很显然 大陆用户(先不说这个定义是什么) 和 访问 会在一定时间内超时 是两回事 回到原始的需求, 判断 大陆用户 来做什么呢?
    0 0
  • dcsuibian
    2022年11月20日 10:37
    const res=window.confirm('将地区设为中国大陆?')
    0 0
  • agagega
    2022年11月20日 10:37
    你先得定义一下大陆用户是什么意思。不过我倒是合理怀疑国产软件会通过给这些域名发请求来判断当前用户是不是在代理状态
    0 0
  • totoro52
    2022年11月20日 10:37
    你这如果挂了 VPN 就能绕过了,一般都会绕过大陆 IP , 更好的方案是搞一个被墙的 IP , 直接 ping 一下即可,也不需要走 http 太慢了
    0 0
  • hash
    2022年11月20日 11:08
    典型的外包项目能蒙混过关的错误答案
    0 0
  • Pastsong
    2022年11月20日 11:08
    那你至少要等个连接超时的时间吧
    0 0
  • janus77
    2022年11月20日 11:37
    小项目还真能用,不过也就是能用罢了
    0 0
  • xingstar
    2022年11月20日 11:37
    这个方法挺骚操作的啊,涨知识了😂
    0 0
  • lambdaq
    2022年11月20日 12:08
    你这访问的是 http ? 我直接 hosts 改得飞起。
    0 0
  • YY
    2022年11月20日 12:08
    dns 劫持呢
    0 0
  • qingmuhy0
    2022年11月20日 12:36
    把网址换成 lun 子是不是正确率更高,这样子伊朗什么的也不会获得中国国籍。
    0 0
  • spicy777
    2022年11月20日 12:36
    <a href="javascript:alert('清除成功');">清除缓存</a>
    0 0
  • makelove
    2022年11月20日 12:36
    既然是这种方法,那 ping 政 x 府网站延迟低这个方法比这个快速一点
    0 0
  • docx
    2022年11月20日 13:06
    @ 这样本质上还是用了 cf 的 geoip 库
    0 0
  • blankmiss
    2022年11月20日 13:06
    确实直接取时区 会不会更好一点
    0 0
  • chinalawme
    2022年11月20日 13:06
    成功访问 会返回 301 ,跳转到 HTTPS 地址,怎么是 200 呢?
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月20日 13:36
    #32 实践中真是 200 ,我估计 axios 自动跳转,直到最后一层不用跳才停
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月20日 13:36
    #32 不过你提醒我了,这样跳效率更差
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月20日 13:36
    #15 所以 mainLand 变量默认 true ,超时说明他就是打不开谷歌
    0 0
  • yaott2020
    2022年11月20日 13:36
    这是站点直接返回的客户端地址,和 geoip 无关
    0 0
  • yaott2020
    2022年11月20日 13:36
    如果说是 loc 的话,确实。你可以用 ip 字段自己请求其他的 geoip api
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月20日 13:36
    #28 那种地区在我看来也是“大陆”
    0 0
  • jinliming2
    2022年11月20日 14:06
    #16 这是 ES2021 的新语法糖 Numeric Separators ,Chrome 75 开始支持
    0 0
  • WinkeyLin
    2022年11月20日 14:06
    慕名而来,都能上 V2EX 了为什么会想出这种方法
    0 0
  • cvbnt
    2022年11月20日 14:36
    我怀疑你想 ddos gfw ,但我没有证据
    0 0
  • aladdinding
    2022年11月20日 14:36
    看 IP 就行 根据这个生一个排序好的 IP 地址,直接二分查找就行 log(n)
    0 0
  • mofe
    2022年11月20日 15:06
    发现这俩一起用甚至能检测是否用了代理…… 用了代理返回结果不一样……
    0 0
  • alexmy
    2022年11月20日 15:36
    盲目猜测,应该是产品不对大陆开放吧?比如 小说 app?
    0 0
  • remember5
    2022年11月20日 16:06
    #47 一样,两次访问检测的 ip 不一样
    0 0
  • VYSE
    2022年11月20日 16:06
    关了 follow redirect ,这样就多跳了个 http
    0 0
  • xinge666
    2022年11月20日 21:06
    实用性不高 像我这种 24 小时开着分流代理的 就没用了
    0 0
  • baobao1270
    2022年11月20日 22:06
    因为用 locale 不优雅。 很多程序员都假设“世界上只有一个时区”、“世界上只有两种 locale”,导致了很多 bug
    0 0
  • WildCat
    2022年11月20日 23:06
    网络安全法,个人信息保护法。
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月21日 00:36
    #56 这类用户在我看来就不是“大陆用户”
    0 0
  • S179276SP
    2022年11月21日 01:06
    屏蔽谷歌搜索的还真就只有大陆,土库曼斯坦都能打开
    0 0
  • wobuhuicode
    2022年11月21日 01:36
    几年前的代码就用这个判断了。后来嫌这个判断需要等待太久。 就把 APP 分成了两个,google play 上一个,国内上一个。进入 App ,0 延迟判断。
    0 0
  • huangqihong
    2022年11月21日 01:36
    tiktok 我安装后,即使挂了火箭,还是不行,非要下了 sim 卡才行,平板就好多了
    0 0
  • TWorldIsNButThis
    2022年11月21日 01:36
    看过不少国外的示例代码里这么写 比较符合英语的习惯
    0 0
  • codehz
    2022年11月21日 02:06
    最简单的方法就是判断 sim 卡地区呀,没 sim 卡就当作模拟器,模拟 sim 卡地区可麻烦了,至少能挡掉一大堆人
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月21日 02:06
    #68 这种情况你打开淘宝也是海外版界面
    0 0
  • xuelu520
    2022年11月21日 02:36
    请求超时时间太长了,直接解析 DNS 吧,速度快很多。
    0 0
  • Jooooooooo
    2022年11月21日 02:36
    那用梯子的用户岂不是被漏过去了. 违法了呀.
    0 0
  • starXx
    2022年11月21日 03:06
    公司是可以申请外网访问的,ip 还是正常的省份;算了,还是一楼说得对
    0 0
  • estk
    estk 会员 (楼主)
    2022年11月21日 03:36
    #72 能出墙的用户我们一般都不当做“大陆用户”
    0 0
  • S179276SP
    2022年11月21日 03:36
    你访问外网的 IP ,还是在 CNNIC 下的大陆 IP 地址么?
    0 0
  • sherlockwhite
    2022年11月21日 04:06
    其实就是有能力访问谷歌的认作自由世界的用户,不能访问谷歌的就不是我们用户
    0 0
  • shawndev
    2022年11月21日 05:06
    难道能不能访问谷歌作为单一维度就准确且优雅了?笑话。
    0 0
  • AlphaTauriHonda
    2022年11月21日 06:36
    🧱内的 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
    0 0
  • AlphaTauriHonda
    2022年11月21日 07:06
    上面这些 IP 属于大陆,Cloudflare 的 loc 也应该是 cn ,不过这些 IP 能访问 Google ,而且它们连接墙内墙外都不会过墙。 所以用这些 IP 上网的人属于大陆用户吗?
    0 0
  • x1aoYao
    2022年11月21日 07:06
    嗯。我用 rust 写过一个根据这 5 大 RIR 公开数据,解析成一个区间树(底层就是 B-Tree),用来查找 IP 对应的国家 /地区代码
    0 0
  • lisxour
    2022年11月21日 07:06
    不一样只是因为你只代理了非大陆网站。。。
    0 0
  • gujuji
    2022年11月21日 07:06
    这个是啥意思啊,没看懂 10-1000
    0 0
  • zhangtest
    2022年11月21日 07:06
    写代码也得符合特色国情,这种方式是中国人特权,应该推广开来,让其他国家羡慕一下。
    0 0
  • gujuji
    2022年11月21日 09:36
    想起来了,想起来了哈哈哈,
    0 0
  • CaptainD
    2022年11月21日 09:36
    我不能访问 Google = 我在大陆
    0 0