关于DNS查询包的格式
typedef struct//报文head
{
unsigned short id;
unsigned short flags;
unsigned short ques;
unsigned short answer;
unsigned short author;
unsigned short addition;
}DNSHEAD,*pDNSHEAD;
typedef struct//报文的查询部分
{
//unsigned char *domain;
unsigned short type;
unsigned short class;
}SEARCH,*pSEARCH;
void genDNSPacket(char *addr,char *dnssendbuff)
{ //将head加到dnssendbuff里面,结果dnssendbuff里面没有这部分
pDNSHEAD pdnshead = (pDNSHEAD)malloc(sizeof(DNSHEAD));
pSEARCH psearch = (pSEARCH)malloc(sizeof(SEARCH));
pdnshead->id = htons(0x0000);
pdnshead->flags = htons(0x000);
pdnshead->ques = htons(0x0000);
pdnshead->answer = htons(0x0000);
pdnshead->author = htons(0x0000);
pdnshead->addition = htons(0x0000);
memcpy(dnssendbuff,pdnshead,sizeof(DNSHEAD));
printf("pdnshead=%s\n",(char *)pdnshead);
printf("sizeof(DNSHEAD)=%d\n",sizeof(DNSHEAD));
printf("dnssendbuff=%s\n",dnssendbuff);
//将domain www.hao123.com加到报文
char *domain = (char *)malloc(15 *sizeof(char)); //3www6hao1233com0
char num;
char *pbuf;
int length = 0;
num = 0x03;
pbuf = "www";
memcpy(domain + length,&num,sizeof(num));
length += sizeof(num);
memcpy(domain+ length,pbuf,strlen(pbuf));
length += strlen(pbuf);
num = 0x06;
pbuf = "dnspod";
memcpy(domain + length,&num,sizeof(num));
length += sizeof(num);
memcpy(domain + length,pbuf,strlen(pbuf));
length += strlen(pbuf);
num = 0x03;
pbuf = "com";
memcpy(domain + length,&num,sizeof(num));
length += sizeof(num);
memcpy(domain + length,pbuf,strlen(pbuf));
length += strlen(pbuf);
printf("domain=%s\n",domain);
num = 0x00;
memcpy(domain + length,&num,sizeof(num));
length += sizeof(num);
memcpy(dnssendbuff + sizeof(DNSHEAD),domain,16);
printf("strlen(domain)=%d\n",strlen(domain));
memcpy( dnssendbuff, domain, 16);
/将search加到dnssendbuff里面,结果dnssendbuff里面没有这部分
psearch->type = htons(0x0001);
psearch->class = htons(0x0001);
memcpy(dnssendbuff + sizeof(DNSHEAD) + 16,psearch,sizeof(SEARCH));
printf("strlen(dnssendbuff)=%d\n",strlen(dnssendbuff));
printf("dnssendbuff=%s\n",dnssendbuff);
}我ping hao123.com,然后wireshark抓包得到的结构看了下,发现我在程序里边的head部分和最后面的查询类和查询类型部分没加到报文里边,报文打出来之后只出现了个 3www6hao1233com ,没发现head和search部分,估计是我的这两部分的程序不正确,希望牛人帮我看下,谢谢!
...全文
相关推荐
邮箱正确性验证源代码(jar包)
这个名为“邮箱存在性验证”的jar包提供了一个实现以上步骤的工具。它可能包含了以下组件:- **验证类**:这个类包含了验证邮箱的方法,可能包括了格式检查、DNS查询和SMTP连接等逻辑。
Python之aett-domain包语法、参数和实际应用案例
aett-domain 是 Python 生态中专注于域名解析、域名信息查询、域名合规校验及域名相关工具链的轻量级包,核心定位是为开发者提供简单易用的域名操作接口,无需关注底层 DNS 协议细节或第三方接口调用复杂性。
C++如何实现DNS域名解析
- 查询请求包含一个特定格式的DNS包,包括标识符、查询标志、问题计数、答案计数等字段,以及域名、查询类型和查询类。3. **DNS包头部解析**: - ID字段用于匹配查询和回复。
dns请求响应,最原始的组包拆包DNS包
这个过程需要对DNS报文的二进制格式有深入理解,因为需要正确地编码每个字段。3.
pcap数据包 DNS解析
**检查DNS包**:通过比较数据包的协议(TCP或UDP)和端口号(53)来识别DNS包。如果匹配,可以进一步处理。4.


