V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dusu
V2EX  ›  程序员

「思考」如何快速有效地判断用户可以访问外网?

  •  
  •   dusu · 2022-05-11 03:45:38 +08:00 · 2823 次点击
    这是一个创建于 687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有个需求,就是想在前端或 App 端快速判断用户是否能有效访问到外网,从而给用户推荐不同内容。

    目前的想法一:

    1. 自己买个国外服务器 IP

    2. 想办法让 GFW 墙了 IP 后,再给个 api 回调,通了就代表能正常访问.

    想法二:

    利用一些三方 IP 检测服务(包含在 gfwlist 里的)

    获取用户的国外 IP ,从而达到粗略判断的效果


    但是考虑到这些有一定的局限性

    而且如果是被墙的 IP ,可能接口只能以超时为判断,并不会那么「快速」

    前来请教各位大佬,有什么更「成熟」更「快速」的方案么?

    第 1 条附言  ·  2022-05-11 12:02:39 +08:00

    感谢各位,大家提供的方案更多是在app端,我需要考虑的方案是兼并前端和app,前端要用google等服务的话还需要找能跨域或者jsonp的接口,所以才会有第一种方案

    第 2 条附言  ·  2022-05-11 12:09:57 +08:00

    onload|onerror 可以解决大部分问题了,感谢各位~

    24 条回复    2022-05-11 18:41:15 +08:00
    flyn
        1
    flyn  
       2022-05-11 04:27:53 +08:00   ❤️ 1
    acehowxx
        2
    acehowxx  
       2022-05-11 07:22:26 +08:00 via Android
    为啥要自己买国外服务器,直接去连谷歌连不上判断就完事了啊。
    yohole
        3
    yohole  
       2022-05-11 08:51:41 +08:00   ❤️ 1
    确实没想通 OP 为啥会有想法一?????
    ochatokori
        4
    ochatokori  
       2022-05-11 08:55:31 +08:00 via Android   ❤️ 8
    有没有一种可能,楼主是开发反诈 app 的王晶🐶
    cmdOptionKana
        5
    cmdOptionKana  
       2022-05-11 09:04:12 +08:00   ❤️ 2
    可以先给用户推荐墙内内容,然后在后台检查能否连接墙外,如果能,下次刷新就推荐墙外内容。反之,推荐墙外内容时也同时检查,一旦超时就改成墙内内容。

    这样,墙内用户永远感觉不到(因访问墙外 IP 引起的)超时。而翻墙用户也只是偶尔遇到“抽风”,这点翻墙用户早已习惯。
    Kinnice
        6
    Kinnice  
       2022-05-11 09:23:22 +08:00
    你是否真实需要准确判断?
    一般做法 想法二即可,而且也并不需要包含在 gfwlist ,一般的国外 ip 查询即可
    Kinnice
        7
    Kinnice  
       2022-05-11 09:25:53 +08:00
    @Kinnice 四五个 ip 查询的接口,并发请求,回来任意一个就可以判断
    litchinn
        8
    litchinn  
       2022-05-11 09:26:58 +08:00   ❤️ 2
    我觉得会访问外网的用户,你给他的外网版选择,他会自己去的,例如 taptap ?
    InDom
        9
    InDom  
       2022-05-11 09:29:46 +08:00   ❤️ 1
    img.onerror || img.onload
    kujio
        10
    kujio  
       2022-05-11 09:32:23 +08:00
    ping google.com 不行吗?
    c1273082756
        11
    c1273082756  
       2022-05-11 09:50:15 +08:00
    @kujio 即便是开梯子也是 ping 不通 google.com 的吧
    sxeuosme
        12
    sxeuosme  
       2022-05-11 09:51:02 +08:00
    @yohole 估计不想让用户发现 app 在主动探测把
    yohole
        13
    yohole  
       2022-05-11 09:59:23 +08:00
    @sxeuosme 即使是这样,也有很多方法,但是 OP 的想法一不仅提高成本,而且还提高了复杂性和不稳定性,除非是有其他没说明的场景或者目的,不然正常来说不应该有这种想法
    spicecch
        14
    spicecch  
       2022-05-11 10:23:30 +08:00
    不应该是判断用户已经用了外网访问然后再推内容吗
    5966
        15
    5966  
       2022-05-11 10:49:52 +08:00 via iPhone   ❤️ 1
    我在想,一些 App 有没有这样的试探动作?
    nmap
        16
    nmap  
       2022-05-11 11:05:58 +08:00
    curl google
    unco020511
        17
    unco020511  
       2022-05-11 11:49:25 +08:00
    你直接在 app 内发起 google 的访问,然后 callback 一下结果判断成功与失败不就行了吗,为啥想这么复杂
    yaott2020
        18
    yaott2020  
       2022-05-11 12:05:53 +08:00 via Android
    找个被墙的站,且用了 CloudFlare CDN 服务的,直接用 http://域名 /cdn-cgi/trace 就可以获取客户端网络信息
    7gugu
        19
    7gugu  
       2022-05-11 13:42:34 +08:00 via iPhone
    ping 一下 google 就好了吧😂
    guanzhangzhang
        20
    guanzhangzhang  
       2022-05-11 14:32:51 +08:00
    @7gugu 如果被运营商劫持 dns 解析到省内一个所有 tcp reset 的 ip 地址,那也是能 ping 通的
    jerryjhou
        21
    jerryjhou  
       2022-05-11 14:50:43 +08:00 via iPhone
    @litchinn Tap 国际版已经进化到锁 SIM 卡归属地了,卡一是国内卡一律白屏
    而且用小米华为访问 Tap 国际会提示色情诈骗。。。
    leefor2020
        22
    leefor2020  
       2022-05-11 15:23:35 +08:00 via iPhone   ❤️ 1
    @5966 ,要是某些安装量大的 App 已经在这么做并且上报了,那可有点吓人
    onice
        23
    onice  
       2022-05-11 17:19:56 +08:00
    curl 一下 google ,如果连接超时,就说明 failed ,如果返回内容,就说明 success.
    kyro00000
        24
    kyro00000  
       2022-05-11 18:41:15 +08:00 via iPhone
    我怀疑是反诈?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5298 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 09:27 · PVG 17:27 · LAX 02:27 · JFK 05:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.