linux socket编程 查询dns,Linux socket编程 DNS查询IP地址

这篇博客详细介绍了如何填充DNS请求报文,使用socket API进行通信,并解析DNS响应报文,包括常见错误处理。通过实例展示了对百度、ccnu.edu.cn和163.com域名的处理,适合初学者理解DNS工作原理。
摘要由CSDN通过智能技术生成

本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址。所以这次的实验主要就是解析DNS报文。同时也需要正确的填充请求报文。如果代码有什么bug,欢迎指正啊。代码排版有点乱。。。

本文有以下内容

DNS报文的填充和解析

利用socket API传输信息

一、填充DNS请求报文

随便百度一下,就可以知道DNS报文的格式。所以这里只介绍如何填充DNS报文。

首先是填充报文首部:

然后填充报文的问题部分:

域名格式:该部分一数字开始以0结束。

查询类型:1代表IP地址、2代表名字服务器、5代表规范名称、12代表指针记录

查询类:1代表互联网

下面是填充域名为百度(www.baidu.com)的代码

二、利用socket发送DNS报文

下面是代码:

这部分就是普通的socket的创建、发送和接收过程。

三、解析DNS响应报文

自己错将16进制的数错看为10进制数了,在这里坑了很长时间。注意报文中的指针的偏移量,只有指针的偏移量指的是规范名称该资源记录才是IP地址。在报文中还有很多和IP地址无关的资源记录。下面是代码,不过遇到复杂的DNS报文可能有bug。这里只实验了三个域名:www.ccnu.edu.cn

www.baidu.com www.163.com(这个域名有点复杂)。

四、完整的代码和总结

下面是完整的代码:

总结:刚开始感觉无从下手

不知道如何与DNS服务器交换信息 就用socket向服务器发送报文

不知道如何发送请求报文 百度喽

不知道如何处理响应报文 自己查看报文格式

暂时就这么多吧!

感谢下面的博客:

原文:http://www.cnblogs.com/mr-zys/p/3784629.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值