如何通过Postman向DNS服务器发送请求?实操遇无响应问题
问题分析与解决办法
首先得明确:Postman是为HTTP/HTTPS协议设计的工具,而传统DNS(53端口)用的是UDP或TCP上的二进制DNS协议,和HTTP完全不兼容——你用Postman往53端口发HTTP请求,DNS服务器根本看不懂,自然不会给你响应。
至于443端口,8.8.8.8的443是用于**DNS over HTTPS(DoH)**的,但直接发普通HTTP请求也不行,得符合DoH的规范。
想用Postman实现DNS查询?只能走DoH方式,步骤如下:
方式1:GET请求
把二进制DNS查询报文做Base64URL编码,拼在请求参数里:- 新建GET请求,URL填
https://8.8.8.8/dns-query - 添加查询参数
dns,值填编码后的DNS报文(比如查询example.com的A记录,编码后是AAABAAABAAAAAAAAC2V4YW1wbGUDY29tAAABAAE=) - 发送请求,响应里的
application/dns-message类型二进制数据就是DNS响应,可专门工具解析。
- 新建GET请求,URL填
方式2:POST请求
直接把二进制DNS报文放在请求体里:- 新建POST请求,URL填
https://8.8.8.8/dns-query - 请求头添加
Content-Type: application/dns-message - 请求体选「binary」模式,上传预先生成好的DNS查询二进制文件(可用
dig +nocmd example.com A +noall +hex生成十六进制后转成二进制文件)
- 新建POST请求,URL填
要测试传统UDP/TCP DNS请求?Postman做不到,换这些工具:
- 命令行工具:
dig @8.8.8.8 example.com或者nslookup example.com 8.8.8.8 - 编程脚本:用Python的
dnspython库、Go的net/dns包直接发送请求 - 模拟工具:用Wireshark抓正常DNS请求,再用
nc(netcat)工具发送二进制报文
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

