V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EridanusSora
V2EX  ›  Node.js

有什么办法让 Node 里发起的请求的 DNS 请求走 Socks 代理

  •  
  •   EridanusSora · 2019-04-29 10:57:46 +08:00 · 5633 次点击
    这是一个创建于 1795 天前的主题,其中的信息可能已经有所发展或是发生改变。

    或者其他代理手段?

    开发者层面,非用户层面。

    当前使用 socks-proxy-agent 代理请求 结果发现 DNS 没过代理。

    第 1 条附言  ·  2019-04-29 16:21:04 +08:00
    感觉有些人可能误解了。

    我的意思是,像浏览器的代理设置就可以让 DNS 经过 Socks5 代理,在 Node 中能不能做到这样的效果。
    11 条回复    2019-04-29 19:55:43 +08:00
    jitongxi
        1
    jitongxi  
       2019-04-29 13:02:17 +08:00
    windows ? windows 的 dns 请求不走当前程序的,是一个独立的服务。
    oyosc
        2
    oyosc  
       2019-04-29 13:06:19 +08:00   ❤️ 1
    建议你先查查什么是 DNS
    YuxiangLuo
        3
    YuxiangLuo  
       2019-04-29 13:16:30 +08:00 via Android
    http 请求的话可以试试我这个 https://github.com/YUxiangLuo/node-socks5-http
    northernlights
        4
    northernlights  
       2019-04-29 16:02:21 +08:00
    弄个虚拟机,搞个网关级别的代理吧。
    whoami9894
        5
    whoami9894  
       2019-04-29 16:23:44 +08:00 via Android   ❤️ 1
    udp 包为什么会走应用层代理
    giuem
        6
    giuem  
       2019-04-29 16:32:06 +08:00 via iPhone   ❤️ 1
    socks5h
    momocraft
        7
    momocraft  
       2019-04-29 16:33:23 +08:00
    瀏覽器那個選項的意思是 "由代理服務器解析域名", 你其實不知道代理服務器是不是從 dns 獲得 ip
    jinliming2
        8
    jinliming2  
       2019-04-29 17:48:41 +08:00 via iPhone   ❤️ 1
    可以尝试 Google 或者 1.1.1.1 的 DNSoverHTTPS 接口,自己解析然后直接用,自己解析走的 HTTPS 就可以直接走代理了。
    whoami9894
        9
    whoami9894  
       2019-04-29 18:04:48 +08:00 via Android   ❤️ 1
    @whoami9894
    我明白 lz 的意思了…… socks5 的控制报文里写域名,让 socks5 server 拿到后去解析
    lzvezr
        10
    lzvezr  
       2019-04-29 18:18:22 +08:00   ❤️ 1
    应该是挺麻烦, DNS 查询的时候可以传入一个 lookup 函数, 需要自己写, 不知道 npm 上有没有现成的
    EridanusSora
        11
    EridanusSora  
    OP
       2019-04-29 19:55:43 +08:00   ❤️ 1
    结贴。

    看了下 socks-proxy-agent 的源码。

    https://github.com/TooTallNate/node-socks-proxy-agent/blob/d8152efd21d2c0d7a9d08588de61bbc59e6c3dde/index.js#L60

    如果初始化的时候传入的是`socks5://xxx`这样的字符串,会判断成不适用`socks5h`,结果导致本地解析。

    所以,要么使用`socks5h://xxx`,要么传入 object 显式指定 protocol。

    注:使用`socks://xxx`也是默认使用`socks5h`。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3243 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:45 · PVG 19:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.