dns报文浅析

可以参考博客:深入理解DNS报文格式

DNS报文格式解析(非常详细)

DNS 报文结构和个人 DNS 解析代码实现——解决 getaddrinfo() 阻塞问题
在这里插入图片描述
DNS header :
在这里插入图片描述

实现截图:

在这里插入图片描述

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <ctype.h>

char dns_servers[1][16];//存放DNS服务器的IP
int dns_server_count = 0;

/*
**DNS报文中查询区域的查询类型
*/
#define A 1 //查询类型,表示由域名获得IPv4地址

void ngethostbyname(unsigned char*, int);
void ChangetoDnsNameFormat(unsigned char*, unsigned char*);

/*
**DNS报文首部
**这里使用了位域
*/
struct DNS_HEADER {
    unsigned short id; //会话标识
    unsigned char rd :1; // 表示期望递归
    unsigned char tc :1; // 表示可截断的
    unsigned char aa :1; //  表示授权回答
    unsigned char opcode :4;
    unsigned char qr :1; //  查询/响应标志,0为查询,1为响应
    unsigned char rcode :4; //应答码
    unsigned char cd :1;
    unsigned char ad :1;
    unsigned char z :1; //保留值
    unsigned char ra :1; // 表示可用递归
    unsigned short q_count; // 表示查询问题区域节的数量
    unsigned short ans_count; // 表示回答区域的数量
    unsigned short auth_count; // 表示授权区域的数量
    unsigned short add_count; // 表示附加区域的数量
};

/*
 * DNS报文首部--- 按照网络字节序
 * 0-----------------------------------------------------------------31
 * -     Transaction ID            |            Flags                |
 * -     Questions                 |            Answer RRs           |
 * -     Authority RRS             |   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值