通过UDP发送DNS协议报文取得域名对应的IP地址:源地址
DNS数据包格式及内容详解:原地址
只要向网关或都域名服务器的53端口发送一个DNS查询报文,就可以收到服务器响应的报文,解析这个报文就可以得到域名对应的IP地址。
DNS查询包的编码:(以www.baidu.com为例)
3E 3A //为标识字段
01 00 //为标志字段,该字段设置了TC表示该报文是可截断的
00 01 //查询报文数量为1
00 00 00 00 00 00 //表示回答,授权和额外信息都为0
03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00 //表示查询的名字为www.baidu.com
00 01 //为类型,1表示A查询
00 01 //为类型,1表示Internet数据
DNS响应包:(以www.baidu.com为例)
3E 3A //为标识字段
81 80 //为标志字段,其中设置了QR = 1,RD = 1,RA = 1
00 01 //问题数1
00 03 //回答数3
00 00 00 00
03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00 //表示查询的名字为www.baidu.com
00 01 //为类型,1表示A查询
00 01 //为类型,1表示Internet数据
C0 0C //为域名指针
00 05 //表示CNAME(规范名称)
00 01 //为类型,1表示Internet数据
00 00 03 4B //生存时间
00 0F //数据长度
03 77 77 77 01 61 06 73 68 69 66 65 6E C0 16
C0 2B 00 01 00 01 00 00 00 63
00 04 //IP v4
79 0E 59 0A //IP1
C0 2B 00 01 00 01 00 00 00 63
00 04 //IP v4
79 0E 58 4C //IP2
简单点的话就是回复包的最后四字节就是域名对应的一个IP,稍微有点注意的是查询包里的域名的编码。
域名的编码格式:以'.'把域名分成多个标示符序列,每个序列的首字节说明该标示符的长度,最后以0结束。
www.baidu.com 对应 03 77 77 77 05 62 61 69 64 75 03 63 6F 6D 00
www 03 77 77 77
baidu 05 62 61 69 64 75
com 03 63 6F 6D