50行c代码实现DNS查询

DNS协议是互联网最重要的基础协议,也是用的最多的UDP协议之一,现在也开始支持基于TCP的DNS和基于ssl的加密的DNS协议。本文虫虫以一个简单实例带领大家一起学习DNS协议,实现一个简单的DNS查询客户端。DNS协议非常简单,详细可以参考国际互联网工程任务组IETF的rfc1035国际标准。

DNS查询协议由查询头和请求部分组成。查询头

DNS查询头结构如上所示,实例中,我们需要设置的唯一字段是消息ID(16位值),它将被复制回服务器响应中。RD(设置为1),告诉DNS服务器在需要时递归查询;QDCOUNT(设置为1),表示我们只有一个域可供查找。请求部分

请求部分,需要设置的字段有:要查询的域名通过QNAME中设置。不必直接放置域名,可以通过"标签"将其拆分为几个部分。实例中,我们的标签将是"www",然后是"ijz",然后是"me"。QNAME要求在每个标签之前加上前缀长度,并且最后以0结尾。所以我们的QNAME将是:3,w,w,w,3,i,j,z,2,m,e,0注意,QNAME必须以0结尾。QTYPE和QCLASS都将设置为1。服务器响应

在查询后,服务器响应中,解析的IP地址将位于RDATA的最后4个字节中。为了简单处理,我们只需要获取该部分内容即可。下面是C整个代码源码:

50行c代码实现DNS查询

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024A22OB900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券