ESP32居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现

ESP32居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现 你有没有过这些烦恼想在本地内网解析自定义域名却要折腾路由器 hosts想拦截广告却找不到轻量的嵌入式 DNS 方案想学习 DNS 协议却被复杂的 C 语言实现劝退今天给大家分享一个开发者写的microdns库仅能创建 WiFi 热点、监听标准 53 端口还支持通配符解析甚至带了 Web 管理界面关键是全靠 MicroPython新手也能看懂跑通。项目介绍这个 0.0.1 版本的小项目核心功能已经拉满✅ ​AP 模式热点​一键创建名为ESP32_DNS_Server的 WiFi 网络密码12345678设备直连就能用✅ ​标准 DNS 服务​监听 UDP 53 端口完美兼容 A 记录IPv4查询符合 DNS 协议规范✅ ​通配符解析​支持*.local这类通配符一键解析所有子域名✅ ​Web 管理界面​浏览器访问就能看服务器状态不用敲命令✅ ​轻量纯 Python​核心代码仅 300 行无复杂依赖ESP32 内存毫无压力✅ ​MIT 开源协议​随便改、随便用商用也没问题快速使用这里已经把所有文件都整理好了跟着步骤走新手也能一次成功需要准备一块 ESP32 开发板随便哪家的都行我用的是 ESP32-S3已经刷好 MicroPython 固件不会刷的看我之前的教程安装mpremote工具用来传文件到 ESP32首先用mpremote安装microdns包也可以直接传文件库的地址就在upypi上https://upypi.net/搜索microdns点击详情页 进入 复制 下载 指令即可然后把这些文件传到 ESP32 根目录main_with_web.py带 Web 界面的完整版本microdns.pyDNS 核心模块web_server.pyWeb 界面dns_list.py域名配置文件具体使用细节查看 https://upypi.net/zh/pkgs/microdns进阶测试DNS 劫持与 NCSI 欺骗测试目标在基础 DNS 解析功能之上我们完成两个进阶实验​DNS 劫持​将公共 WiFi 下访问的baidu.com等域名强制解析到 ESP32 的自定义宣传页面模拟 “公共 WiFi 钓鱼” 场景。​NCSI 欺骗​拦截 Windows 系统的网络验证请求让设备连接 ESP32 热点后显示「已连接安全」而非「无 Internet 连接」提升伪装真实性。测试 1DNS 劫持演示 —— 访问百度却跳转到宣传页设备连接 ESP32 热点ESP32_DNS_ServerDNS 地址设置为192.168.4.1。浏览器输入baidu.com观察页面跳转。浏览器地址栏仍显示baidu.com但页面被劫持到 ESP32 的信息安全宣传界面同时浏览器顶部出现「不安全」提示符合 HTTP 未加密特征。ESP32 的 DNS 服务器将baidu.com解析到自身 IP192.168.4.1同时 Web 服务器监听 80 端口返回自定义 HTML 页面 —— 这就是典型的公共 WiFi DNS 劫持场景也是我们用来科普网络安全的教育演示。测试 2NCSI 欺骗实现 —— 骗过 Windows 网络验证Windows 系统会通过访问dns.msftncsi.com和www.msftconnecttest.com/connecttest.txt来判断网络是否连通我们需要让 ESP32 “配合” 这个验证流程。在dns_list.py中添加 NCSI 相关域名解析DNS_LIST { # ... 其他域名 dns.msftncsi.com: 192.168.4.1, www.msftconnecttest.com: 192.168.4.1, }在web_server.py中添加对/connecttest.txt的响应app.route(/connecttest.txt) def connecttest(): return Microsoft Connect Test, 200, {Content-Type: text/plain}从终端日志可以看到Windows 发起的 NCSI 验证请求被 ESP32 成功拦截并响应[dns]收到 DNS 查询: dns.msftncsi.com (类型: 1) [dns]解析 dns.msftncsi.com - 192.168.4.1 [dns]收到 DNS 查询: www.msftconnecttest.com (类型: 1) [dns]解析 www.msftconnecttest.com - 192.168.4.1 [web]Generated response: [(Content-Type, text/plain)]还能怎么玩这个项目现在只是个雏形还有很多可以折腾的方向 ​DNS 转发​把没匹配到的域名转发到 8.8.8.8实现 “本地解析 外网解析” 混合模式 ​缓存机制​给 DNS 查询加缓存减少重复解析提升速度️ ​广告拦截​把广告域名解析到 0.0.0.0实现无广告上网 ​更多记录类型​支持 AAAAIPv6、CNAME 等记录更贴近真实 DNS ​美化 Web 界面​把 Web 界面改成更现代的样式加统计图表