SimpleDNS 源码学习笔记:几百行 C 搞懂 DNS 报文
学完 socket 网络编程之后写过 HTTP、FTP 这类文本协议往往还想接触一种「二进制报文」的典型协议。整理了一个很小的项目SimpleDNS——用 C 写的教学用 DNS 服务器核心基本就在一个main.c里大约七八百行量级专门用来理解 DNS 查询与应答是怎么拼出来的。1. 项目概览SimpleDNS 适合作为网络编程练手项目主要因为体量很小单文件就能看完主流程单线程 UDP模型干净没有多余框架支持常见的A / AAAA / TXT查询自己做报文解码、编码协议细节暴露得很直接一句话总结代码量很小协议味道很正适合专门学 DNS 报文。官方也写明这是教学用途对非法报文没有完整防护不要当生产 DNS 用。2. DNS 基础DNS 和 HTTP/FTP 最大的不同传输层常用UDPSimpleDNS 也是 UDP报文是二进制结构不是一行一行的文本命令典型交互客户端发 Query服务器回 Response同一条报文结构靠标志位区分一份 DNS 报文大致分几段Header12 字节事务 ID、QR/Opcode/RCODE、各段计数Question问什么名字、什么类型A/AAAA…Answer / Authority / Additional资源记录RR域名在报文里不是foo.bar.com明文点分而是标签长度编码例如3foo3bar3com0和 FTP「控制连接 数据连接」不同DNS 通常一次请求一次响应就在同一个 UDP 包来回里完成。3. 源码阅读顺序与模块分工仓库几乎只有一个核心源文件阅读顺序可以按函数走main—— UDPsocket/bind循环recvfrom/sendtodecode_msg/decode_header—— 解析查询包decode_domain_name—— 域名标签解码resolve_query—— 根据问题生成答案 RRget_A_Record/get_AAAA_Record/get_TXT_Record—— 「区数据」encode_msg/encode_header/encode_resource_records—— 打包响应逻辑模块可以这样理解部分作用类型与掩码常量QR、Opcode、RCODE、记录类型A1, AAAA28, TXT16…struct Message一次完整 DNS 消息的内存表示struct Question问题段struct ResourceRecord资源记录答案等get16bits/put16bits…网络字节序读写小工具decode_*二进制 → 结构体resolve_query查本地映射填 answersencode_*结构体 → 二进制默认监听9000端口不必抢 53方便普通用户调试。4. 核心结构主循环四步main里的服务循环非常清晰recvfrom收到 UDP 查询decode_msg解成Messageresolve_query填答案encode_msg再sendto回客户端可概括为收包 → 解码 → 解析/作答 → 编码 → 发包这和文本协议服务器的「读一行 → 分发 → 回写」是同一类骨架只是 DNS 把「一行文本」换成了「二进制报文」。5. 报文解码从二进制到结构体Headerdecode_header先读 12 字节头id事务标识响应要带回flags拆出 QR、Opcode、AA、TC、RD、RA、RCODEqdCount/anCount/nsCount/arCount后面各段有多少条Question对每个问题decode_domain_name把标签编码还原成foo.bar.com再读qType、qClassSimpleDNS 期望收到的是「纯查询」答案段计数为 0否则直接拒绝解析——教学实现逻辑直白。6. 作答resolve_queryresolve_query会把消息改成响应qr 1并设置权威等标志遍历每个Question按类型调用本地函数A →get_A_RecordAAAA →get_AAAA_RecordTXT →get_TXT_Record成功则挂到answers链表并增加anCount不支持的类型给NotImplemented默认写死示例foo.bar.com→ IPv4192.168.1.1同域名 → IPv6fe80::1TXT →abcdefg想加域名改这几个get_*_Record即可非常适合边改边用dig验证。7. 报文编码从结构体回到二进制响应路径encode_header写回 ID、标志、各计数原样编码 QuestionDNS 响应通常带回问题encode_resource_records写 Answer名字、type/class/ttl、rd_length、RDATAA 记录 RDATA 是 4 字节地址AAAA 是 16 字节TXT 先长度再文本。跟读时建议对照 Wireshark 或dig输出看字段是否对得上。8. 和 Tinyhttpd / Tinyftp 的对比TinyhttpdTinyftpSimpleDNS协议HTTP 文本FTP 文本命令DNS 二进制传输TCPTCP双连接UDP体量约几百行约三千行约五百行级单文件核心难点请求行/头、CGIPORT/PASV、进程模型报文编解码、域名格式系列建议顺序Tinyhttpd → Tinyftp → SimpleDNS前两者练文本协议与连接模型这篇补上二进制协议。9. 编译与运行备忘gitclone https://github.com/mwarning/SimpleDNS.gitcdSimpleDNSmake./main另开终端测试dig127.0.0.1-p9000foo.bar.com Adig127.0.0.1-p9000foo.bar.com AAAA注意Debian/Ubuntu 可用dnsutils包提供的dig仅建议本机/内网学习教学实现输入校验不强勿对公网开放10. 小结通过阅读 SimpleDNS可以把这些点串起来DNS 报文 Header / Question / Answer 的基本结构域名标签编码与解码A / AAAA / TXT 资源记录如何写入响应UDP 服务器「解码—处理—编码」的标准骨架有了这篇再去看缓存、递归、DNS 中继就不会觉得报文层是黑盒了。项目链接GitHubhttps://github.com/mwarning/SimpleDNS

相关新闻

智能汽车同质化竞争破局:从蔚来模式到差异化创新路径

智能汽车同质化竞争破局:从蔚来模式到差异化创新路径

1. 从“又一个蔚来”说起:我们到底在讨论什么? 最近,如果你稍微关注一下汽车圈,尤其是新能源和智能驾驶领域,可能会频繁听到一种略带调侃又充满深意的说法:“又一个蔚来”。这个梗最初源于蔚来汽车在用户运…

2026/8/18 10:49:55 阅读更多 →
UE5建筑可视化全流程:从模块化建模到Lumen渲染实战指南

UE5建筑可视化全流程:从模块化建模到Lumen渲染实战指南

1. 先搞清楚 UE5 建筑环境构建的核心流程与常见误区 UE5 做建筑环境,无论是室内设计、建筑可视化还是游戏场景,核心目标都是高效、高质量地完成场景搭建。很多新手一上来就沉迷于某个炫酷的材质或灯光,结果模型结构混乱、资产管理失控&#x…

2026/8/18 10:49:55 阅读更多 →
内网靶场虚拟环境搭建CFS

内网靶场虚拟环境搭建CFS

环境下载 通过网盘分享的文件:CFS三层靶机环境 链接: CFS三层靶机环境 提取码: 39y7 环境安装 按照上一步下载文件,每个文件夹对应一个独立的靶机 Target1_CentOS7 Target2_Ubuntu Target3_Windows7 在D盘下建立文件夹如下,用来存放导入的文件 下面以Target1_CentOS7为例,点…

2026/8/18 10:48:55 阅读更多 →

最新新闻

从零到高手:Obsidian中免费创建专业流程图的终极指南

从零到高手:Obsidian中免费创建专业流程图的终极指南

从零到高手:Obsidian中免费创建专业流程图的终极指南 【免费下载链接】drawio-obsidian Draw.io plugin for obsidian.md 项目地址: https://gitcode.com/gh_mirrors/dr/drawio-obsidian 你是否遇到过这样的困境:开会前需要画一张架构图&#xf…

2026/8/18 13:15:11 阅读更多 →
【八个月网安课程】第二周·周二:文件权限 rwx 与数字表示、chmod/chown/chgrp

【八个月网安课程】第二周·周二:文件权限 rwx 与数字表示、chmod/chown/chgrp

以下是第二周周二学习内容的详细展开,聚焦 Linux 文件权限、数字表示、chmod/chown/chgrp,以及特殊权限 SUID。今天将结合昨天创建的用户进行实操,为后续的权限维持与提权学习打下核心基础。第二周周二:文件权限 rwx 与数字表示、…

2026/8/18 13:15:11 阅读更多 →
Zotero卡片笔记插件ZotCard:3分钟上手,把零散摘录变成可复习的知识卡片

Zotero卡片笔记插件ZotCard:3分钟上手,把零散摘录变成可复习的知识卡片

Zotero卡片笔记插件ZotCard:3分钟上手,把零散摘录变成可复习的知识卡片 【免费下载链接】zotcard ZotCard is a plug-in for Zotero, which is a card note-taking enhancement tool. It provides card templates (such as concept card, character card…

2026/8/18 13:15:11 阅读更多 →
【八个月网安课程】第二周·周一:Linux 目录结构、用户与组概念、useradd/passwd/usermod

【八个月网安课程】第二周·周一:Linux 目录结构、用户与组概念、useradd/passwd/usermod

以下是第二周周一学习内容的详细展开,聚焦 Linux 目录结构、用户与组概念及核心管理命令。今日内容将为你后续的系统操作、权限配置与攻防环境搭建打下最扎实的基础,请务必亲手实践每一个命令。第二周周一:Linux 目录结构、用户与组概念、use…

2026/8/18 13:15:11 阅读更多 →
老电脑升级 Windows 11 被 TPM 卡住?这份免费方案 10 分钟跑通

老电脑升级 Windows 11 被 TPM 卡住?这份免费方案 10 分钟跑通

老电脑升级 Windows 11 被 TPM 卡住?这份免费方案 10 分钟跑通 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …

2026/8/18 13:15:11 阅读更多 →
不费一颗铃钱:用 Happy Island Designer 在浏览器里提前规划动物之森小岛

不费一颗铃钱:用 Happy Island Designer 在浏览器里提前规划动物之森小岛

不费一颗铃钱:用 Happy Island Designer 在浏览器里提前规划动物之森小岛 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)",是一个在线工具,它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》…

2026/8/18 13:14:11 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →