文章摘要
文章探讨了DNS TXT记录的数据限制,指出单个字符字符串长度有限,但整体记录大小受DNS负载限制,UDP下约1232字节,TCP下可达64KB。作者通过Google Public DNS的JSON API演示了在TCP下传输大容量TXT记录,并解决了JSON处理二进制数据的问题,直接使用二进制数据可避免Base64编码的开销,从而传输更多数据。
文章总结
标题:通过DNS传输图像
主要内容:
在DNS的TXT记录中,数据的限制并非如某些地方所说的255字节。实际上,TXT记录可以包含多个字符串,每个字符串的长度受限于单个字节的长度表示,但可以包含多个字符串。真正的限制在于DNS负载的大小,对于UDP协议,这个限制大约为1232字节,而对于TCP协议,则可以达到64KB。
为了展示这一点,作者使用了Google Public DNS的JSON API,并通过自定义服务器在TCP协议下传输大型TXT记录。虽然JSON本身并不适合处理二进制数据,但通过自定义的JSON解析,可以直接在TXT记录中使用原始二进制数据,从而避免了Base64等编码的开销,使得可以传输更多的数据。
作者还提供了一个演示链接,展示了如何通过DNS传输图像。此外,还介绍了如何通过dig命令和Perl脚本来查询并解析这些数据,尽管将DNS响应转换回二进制输出需要一些技巧。
在安全性方面,作者指出,攻击者长期以来一直通过DNS进行隧道传输,但通过浏览器传输大型负载可能是一个新的潜在威胁。由于Google Public DNS的证书包含了8.8.8.8等IP地址,HTTPS流量可以直接从浏览器发出,而无需进行DNS查询,这在某些使用DNS过滤的环境中可能会带来意想不到的风险。
服务器端,作者使用了一个由ChatGPT编写的自定义Go DNS服务器,尽管ChatGPT在某些细节上出现了错误,但作者自己进行了修正。所有代码都可以在提供的链接中找到,AI仅用于服务器组件的编写,博客文章和客户端HTML代码则是作者自己的作品。
发布日期: 2025年9月20日
评论总结
评论主要围绕DNS技术的多种应用展开,观点多样且各有侧重。以下是总结:
DNS传输大文件的可能性
- 评论1指出,虽然单个记录大小限制为64KB,但可以通过组合多个TXT记录来传输更大的文件。
引用:"The cap for record size is 64KB, but you can have an arbitrary number of records..." - 评论7提到,通过自定义Chrome扩展,可以利用DNS传输HTML、JS等内容,且内容大小可达65KB。
引用:"It implements the fake TLD .cdn53... the response contains the HTML content, or any content, and it can be up to ~65 kb in size."
- 评论1指出,虽然单个记录大小限制为64KB,但可以通过组合多个TXT记录来传输更大的文件。
DNS的娱乐与实验性应用
- 评论2分享了通过DNS播放视频(如《Bad Apple》和《Doom》)的实例,展示了DNS的创意用途。
引用:"Very cool. I have done similar for playing Bad Apple as well as Doom over DNS." - 评论6提出了是否可以通过DNS创建类似HN的克隆网站的疑问,进一步探讨了DNS的潜力。
引用:"I wonder is it possible to create a HN clone over DNS?"
- 评论2分享了通过DNS播放视频(如《Bad Apple》和《Doom》)的实例,展示了DNS的创意用途。
DNS的安全性与滥用风险
- 评论3指出,DNS端口53通常开放,可能被用于数据渗透或外泄。
引用:"The wild part of DNS is that port 53 is typically open on firewalls and is excellent for data exfiltration/infiltration." - 评论9警告,由于恶意行为者滥用DNS,防火墙和终端代理会检测并阻止此类行为,限制了其实际应用。
引用:"This is cool and all but due to malicious actors abusing this avenue, firewalls as well as endpoint agents will detect and block this."
- 评论3指出,DNS端口53通常开放,可能被用于数据渗透或外泄。
DNS的其他技术应用
- 评论8提到Iodine项目,展示了通过DNS隧道传输原始IPv4数据的技术。
引用:"There's also the Iodine project if you want to tunnel raw IPv4 over DNS." - 评论5纠正了图像格式的错误,指出实际使用的是HEIF而非AVIF。
引用:"The image is actually HEIF not AVIF."
- 评论8提到Iodine项目,展示了通过DNS隧道传输原始IPv4数据的技术。
对DNS应用的质疑
- 评论4简单质疑了DNS应用的动机,提出了“为什么?”的问题。
引用:"Yes, but why? :)"
- 评论4简单质疑了DNS应用的动机,提出了“为什么?”的问题。
总结:评论展示了DNS在文件传输、娱乐、实验性项目以及安全风险等方面的多样应用,同时也对其实际可行性和动机提出了质疑。