VSCode下Node环境本地DNS劫持测试

梦萱君_5477

梦萱君_5477

2026-07-20

305人浏览

原创

dns.lookup()走系统resolver(查hosts等),不发网络请求;dns.resolve4()绕过系统直连dns服务器,故hosts对其无效,需统一dns代理层拦截。

vscode下node环境本地dns劫持测试

直接改 /etc/hostsC:\Windows\System32\drivers\etc\hosts 不解决动态测试需求,Node 本身不参与 DNS 解析,必须靠本地 DNS 代理层拦截并返回预设 IP。

为什么 dns.lookup()dns.resolve4() 行为完全不同

dns.lookup() 走系统 resolver(查 /etc/hostsnsswitch.conf、mDNS),不发网络请求;dns.resolve4() 绕过系统,直连 DNS 服务器——这意味着你在 hosts 里加的条目对后者完全无效。

  • 开发中若用 http.get({ host: 'myapp.test' }),底层调的是 dns.lookup(),能命中 hosts
  • 但若显式调 dns.resolve4('myapp.test') 或用某些 HTTP 客户端(如 undici 默认行为),就会跳过 hosts,走真实 DNS 查询
  • 验证方式:在代码里分别执行 dns.lookup('myapp.test')dns.resolve4('myapp.test'),看是否都返回 127.0.0.1
  • 结论:仅靠 hosts 无法覆盖所有 Node DNS 调用路径,必须统一 DNS 层出口

macOS/Linux 用 dnsmasq 实现通配劫持

Homebrew 安装后,关键不是启动服务,而是确认配置生效且系统 DNS 指向它。

jinn-node
jinn-node

在Jinn网络为自主项目工作赚取代币奖励,让闲置的OpenClaw代理开始工作。

下载
  • 编辑 /usr/local/etc/dnsmasq.conf,只加这一行:address=/.test/127.0.0.1(注意开头的 /. 表示通配)
  • 运行 sudo brew services restart dnsmasq,别漏 sudo,否则监听不了 53 端口
  • 系统网络设置里,把 DNS 服务器手动设为 127.0.0.1(不是“自动”,也不是“继承自路由器”)
  • 验证:nslookup foo.test 必须返回 127.0.0.1;若返回空或超时,90% 是 DNS 设置没生效
  • 常见坑:dnsmasq 默认不读取 /etc/resolv.conf,所以即使你改了那里也没用,必须在系统网络偏好里显式填

Windows 用 SimpleDNSProxy 替代 hosts

它比改 hosts 强在支持通配、JSON 配置、无需管理员权限运行(只要监听端口不冲突)。

  • 下载最新 release 后解压,编辑 config.jsonrules 数组:{"domain": "*.dev", "ip": "127.0.0.1"}
  • 双击 SimpleDNSProxy.exe 启动,任务栏右下角托盘图标变绿即表示运行中
  • 控制面板 → 网络和 Internet → 更改适配器选项 → 右键当前连接 → 属性 → IPv4 → 手动填 DNS 为 127.0.0.1
  • Chrome 对 .local 域名有硬编码 mDNS 处理,会绕过你的代理,务必用 .test.dev
  • 如果 nslookup myapp.dev 返回 127.0.0.1 但浏览器打不开,检查 Express 是否校验了 req.headers.host,否则可能 400 或 CORS

VSCode 调试时 DNS 解析卡住的离线绕过法

不是所有卡顿都来自业务代码——VSCode 的 pwa-node 调试器自身会在启动阶段尝试联网校验调试适配器版本、加载远程 source map。

  • 离线环境启动前,在 launch.json 的 runtimeArgs 加两项:--dns-result-order=ipv4first--no-dns(Node ≥20.10)
  • 同时在 env 中设 NO_PROXY=*,防止调试器内部 fetch 试图走代理
  • 禁用 VSCode 扩展 Marketplace 相关功能:设置里搜 telemetry 关掉所有遥测,搜 extensions.autoCheckUpdates 设为 false
  • 最关键的一步:彻底退出 VSCode(macOS 上 Cmd+Q,Windows 上右键任务栏图标退出),再重开——旧进程残留会导致 DNS 缓存未刷新
  • 如果仍卡在 getaddrinfo ENOTFOUND,说明某处代码或依赖(比如 axios 默认配置)触发了 DNS 查询,用 strace -e trace=connect,sendto node index.js(Linux/macOS)定位具体调用点

真正难的不是配通一个域名,而是让所有 DNS 调用路径(系统 resolver、C-Ares、调试器自身、第三方库)全部收敛到同一出口。多数失败源于某一层被忽略,比如改了 dnsmasq 却忘了系统 DNS 设置,或写了 address=/.test/127.0.0.1 却用了 .local 测试。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode node dns

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1155

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2272

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1789

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1587

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2487

12

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1758

14

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1202

10

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1076

8

vscode设置中文界面不生效解决方法
vscode设置中文界面不生效解决方法

vscode设置中文界面不生效解决方法:安装中文语言包、通过命令面板设置语言、检查 locale.json 设置、重新安装中文语言包、检查 VSCode 版本和更新、排除插件冲突、检查系统语言设置、查看 VSCode 日志和错误消息、重置 VSCode 设置、查看官方文档和社区支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

414

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程