V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dusu
V2EX  ›  程序员

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

  •  
  •   dusu · May 11, 2022 · 3744 views
    This topic created in 1454 days ago, the information mentioned may be changed or developed.

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

    目前的想法一:

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

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

    想法二:

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

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


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

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

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

    Supplement 1  ·  May 11, 2022

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

    Supplement 2  ·  May 11, 2022

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

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

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