QT实现DNS报文的解析
写在开头:泛在网作业,要实现的功能是使用socket实现DNS报文解析,需要有图形界面。本实例使用的是QT实现的图形界面,这是我第一次接触QT,所以如果你也是,不要担心qt有多难。
1.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报文选择使用数组下标去代替)
代码