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

请教下有没人知道 go 语言把国外的域名解析成 IP

  •  
  •   hayabusa9 · 2022-08-24 21:19:14 +08:00 · 2497 次点击
    这是一个创建于 582 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有个需求,要解析域名背后的 ip ,用 go 原生库的 net.LookupIP 函数就能做到,但是对国外的域名解析的不知道正不正确,我试了几个像 twitter.comfacebook.com 解析出的 ip 地址,用在线网站 ip 反查域名,发现对应的域名都是些奇怪的网站,不是 twitter.com 。有人知道有什么第三方库能做到吗?

    32 条回复    2022-08-26 15:53:14 +08:00
    sunorg
        1
    sunorg  
       2022-08-24 21:20:16 +08:00 via Android   ❤️ 1
    cdn 和 dns 负载均衡了解下
    gabon
        2
    gabon  
       2022-08-24 21:22:40 +08:00 via iPhone
    做不到
    xgfan
        3
    xgfan  
       2022-08-24 21:28:57 +08:00   ❤️ 2
    这和语言就什么关系?
    完全是 dns 的问题。
    1 ,翻墙,防止 dns 投毒
    2 ,使用 doh/dot
    bugfan
        4
    bugfan  
       2022-08-24 21:30:19 +08:00
    找个国外的 dns 服务器,然后用 doh ,dot 或者 doq 去解析
    1423
        5
    1423  
       2022-08-24 21:46:38 +08:00
    被局域网耽误的萌新啊,一个新世界的大门正在向你打开
    jinliming2
        6
    jinliming2  
       2022-08-24 22:21:26 +08:00
    国内有骨干网 DNS 投毒污染,用国外的网络就正常了
    haodingzan
        7
    haodingzan  
       2022-08-24 22:22:22 +08:00 via iPhone   ❤️ 10
    可是,你是怎么上的 v2……
    jim9606
        8
    jim9606  
       2022-08-24 22:27:30 +08:00
    楼主是肉身国外还是用着什么公司内网?不知道墙的存在还能来 v2 提问?
    ch2
        9
    ch2  
       2022-08-24 23:03:16 +08:00
    首先你得确保 dns 是可靠的
    seers
        10
    seers  
       2022-08-24 23:05:45 +08:00
    go 调用的是本地 dns ,你要保证结果正确,首先要找个国外 vps 然后放上去跑
    EminemW
        11
    EminemW  
       2022-08-24 23:20:06 +08:00
    你自己指定使用国外的 dns 就行了
    lianyue
        12
    lianyue  
       2022-08-24 23:37:37 +08:00
    tinkerer
        13
    tinkerer  
       2022-08-24 23:53:51 +08:00   ❤️ 3
    上面说的 DNS over HTTPS 是正解。
    但是国内的 doh 还是不干净,所以需要你在墙外弄一个反代到 quad9 或者 cloudflare 的 doh 服务,
    然后给自己的服务申请好 IP 证书,直接通过 IP 访问反代服务 (e.g. https://1.2.3.4)。

    关键词: doh, reverse proxy, ip cert

    P.S. IP 证书可以用 www1.hi.cn 或者我写的这个小工具 https://github.com/tinkernels/zerossl-ip-cert
    kkeep
        14
    kkeep  
       2022-08-25 00:07:04 +08:00 via Android
    @tinkerer 可以啊,180 天后面也可以续是吧
    q1angch0u
        15
    q1angch0u  
       2022-08-25 00:28:29 +08:00 via iPhone
    @tinkerer 强啊大佬,IP 证书还是用的 zero ssl 吗?
    shiny
        16
    shiny  
       2022-08-25 00:30:29 +08:00 via iPhone
    这个世界的 bug 终于还是被你发现了
    Yadomin
        17
    Yadomin  
       2022-08-25 00:47:39 +08:00 via Android
    这都不知道是怎么上的 V 站呢🤔
    0o0O0o0O0o
        18
    0o0O0o0O0o  
       2022-08-25 00:52:49 +08:00 via iPhone
    通过

    net.resolver
    prefergo

    自定义 dns server 即可
    Kasumi20
        19
    Kasumi20  
       2022-08-25 01:39:22 +08:00
    因为 DNS 通常使用裸奔的 UDP 用户层协议,加密一下就可以啦,Rust 实现: https://github.com/develon2015/dnsd
    datou
        20
    datou  
       2022-08-25 07:51:57 +08:00
    建议楼主找几个 doh 库来解析海外域名的 IP
    danbai
        21
    danbai  
       2022-08-25 09:39:56 +08:00
    curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=p00q.cn'
    cheneydog
        22
    cheneydog  
       2022-08-25 11:11:54 +08:00
    你知道的太多了,peng ~~~
    tinkerer
        23
    tinkerer  
       2022-08-25 14:05:30 +08:00
    @kkeep www1.hi.cn 的证书可是以直接用 acme.sh 申请并添加定时任务更新, zerossl 目前 ip 证书没有开放 acme 所以我才写了工具。
    tinkerer
        24
    tinkerer  
       2022-08-25 14:11:28 +08:00
    @q1angch0u 有几个 IP 在用 zerossl 的证书,目前均可自动更新
    samin
        25
    samin  
       2022-08-25 14:19:15 +08:00
    @jinliming2 方便请教一下如何污染 DNS 吗 ? 真的一点思路都没有

    DNS 是一台服务器,无非就是自己维护了一张键值表给网民解析 ip ,污染不等于你都直接怼到人家数据库修改了数据吗 ?还是有别的方式 ?
    samin
        26
    samin  
       2022-08-25 14:21:09 +08:00
    @tinkerer 大佬方便看一下 25 楼我提的问题吗 ?不干净和污染到底如何造成的 ?或者是我想得太复杂 等于 DNS 本来就是本身控制 运维自己把数据搞脏 ?
    tinkerer
        27
    tinkerer  
       2022-08-25 14:26:56 +08:00
    @samin DNS 协议起初是明文 UDP 的, 而 UDP 包本身就容易被伪造 (甚至可直接伪造来源 IP),何况还是明文。
    想想当年的运营商 HTTP 劫持加广告的事都出现了就好理解了。
    julyclyde
        28
    julyclyde  
       2022-08-25 16:25:32 +08:00
    我回忆了一下,我注意到这个问题大概是二十几年前
    samin
        29
    samin  
       2022-08-25 16:30:48 +08:00
    @tinkerer 大神 有点点悟到了 可是还有个小问题:中间人劫持的话 他怎么做到监听用户呢 ? 不管 TCP/UDP 都是基于 IP 协议,路由的路径是不一定的,所以如何做到劫持如此大量的用户 ?

    BTW:ISP 劫持 HTTP 加入广告就是因为所有人都是通过他进出口,等于可以监听所有他的所属用户群体,很容易去做这件事情
    tinkerer
        30
    tinkerer  
       2022-08-25 21:40:14 +08:00   ❤️ 1
    @samin

    关于如何劫持如此大量的用户,ISP 只需要在用户路由汇入的骨干网机房部署好就行了,这种事也不是普通个体能干的, HTTP 劫持是通过路由,那 UDP 同理,此路是我开,此树是我栽,只是成本反面更低。HTTP 在 TCP 之上还有一层 Session 要管理, 反倒是 DNS UDP 53 端口一锅端就行了,还是专用明文裸协议。
    如果再继续了解,DNSSEC 这种协议扩展是想使 DNS UDP 53 的查询结果可验证,而 DnsCrypt 项目则是对 DNS 协议进行加密包装,这些都是为了让弥补协议本身的可信度缺陷。
    我猜国内的 8.8.8.8 UDP 53 端口是 100% 劫持的。
    我认为劫持用户的 DNS 反而对用户的访问内容监控得更精准。

    P.S. 这些事我只是从技术层面为析过可能的实施方法,并不知道具体细节。
    jinliming2
        31
    jinliming2  
       2022-08-25 22:18:46 +08:00   ❤️ 1
    @samin DNS 服务器在国外,没办法去怼人家的数据库,但是你访问国外的 DNS 服务器,肯定是要经过国际出口的,而出口就那么几个。并且这个不是针对个人的,而是针对所有国内网民的(白名单放行的人上人除外)。
    技术层面,你向国外 DNS 服务器发送一条查询请求,数据包路由到国际出口的时候被中间人识别(当然,现在不一定是要到国际出口了,省级出口也有中间人),立即给你回一个投毒的伪造的响应数据。
    当然,这个是好几年前了,现在有的包直接丢弃的也是有的。
    另外,你就算使用国内的 DNS 服务提供商,他们的 DNS 来源是污染过一遍的,这个是真的怼到数据库里的污染了,所以你查到的结果即便是没有经过中间人篡改,也是被投过毒的。
    rev1si0n
        32
    rev1si0n  
       2022-08-26 15:53:14 +08:00
    https://github.com/shadowsocks/ChinaDNS

    就是干这个的,你可以看看原理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3343 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:42 · PVG 21:42 · LAX 06:42 · JFK 09:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.