QT实现DNS报文解析

QT实现DNS报文的解析


写在开头:泛在网作业,要实现的功能是使用socket实现DNS报文解析,需要有图形界面。本实例使用的是QT实现的图形界面,这是我第一次接触QT,所以如果你也是,不要担心qt有多难。

1.DNS报文的格式

网上有很多关于DNS报文格式的博文,下面贴一个我之前用的
DNS报文讲解的链接

DNS报文的主要格式

2.QT基础入门

QT是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。 —— [ 百度百科 ]

建议直接读QT的官方开发文档。

3.DNS报文的解析

1.生成查询问题的函数

概述:将网址转化成DNS报文中所需要的格式。

代码:

void DNS::generateQuestion(char *name, char *result, int &j){
    int ptr;
    int i;
    ptr = 0;//标记位,用来填写字母计数的。 
    j = 1;
    int count = 0; //计数 
    for (i = 0; name[i] != '\0'; i++)
    {
        if (name[i] != '.')
        {
            result[j] = name[i];
            j++;
            count++;
        }
        else if (name[i] == '.')
        {
            result[ptr] = count;
            ptr += (count + 1);
            count = 0;
            j += 1;
        }
    }
    result[ptr] = count;
    result[j] = 0;
    j++;
    //
    //*((short*)(result + j)) = htons(1);
    *((short*)(result + j)) = 0x0100;
    j += 2;
//  *((short*)(result + j)) = htons(1);
    *((short*)(result + j)) = 0x0100;
    j += 2;
}

2.解析问题字段的函数

概述:解析返回报文中的网址对应的字段。(对于在报文中重复出现的网址段,DNS报文选择使用数组下标去代替)

代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值