linux c dns请求器实现

#完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <time.h>

#define DNS_SERVER_PORT 53
#define DNS_SERVER_IP “114.114.114.114”

#define DNS_HOST 0x01
#define DNS_CNAME 0x05

struct DNS_HEADER
{
unsigned short id;//会话id
unsigned char qr :1;
unsigned char opcode :4;
unsigned char aa :1;
unsigned char tc :1;
unsigned char rd :1;
unsigned char ra :1;//1
unsigned char cd :1;
unsigned char ad :1;
unsigned char z :1;
unsigned char rcode :4;
unsigned short q_count;
unsigned short ans_count;
unsigned short auth_count;
unsigned short add_count;
};
struct DNS_QUESTION
{
unsigned char* qname;
unsigned short qtype;
unsigned short qclass;
};

/*
从www.baidu.com转换到3www5baidu3com
/
void ChangetoDnsNameFormat(unsigned char
dns, unsigned char
host) {
int lock = 0, i;
strcat((char
) host, “.”);

for (i = 0; i < strlen((char*) host); i++) {
    if (host[i] == '.') {
        *dns++ = i - lock;
        for (; lock < i; lock++) {
            *dns++ = host[lock];
        }
        lock++; 
    }
}
*dns++ = '\0';

}

//dns响应报文中数据(域名和ip)的结构体
struct dns_item{
char *domain;
char *ip;
};

int dns_create_header_(struct DNS_HEADER* header)
{
if(header == NULL)
return -1;
memset(header, 0x00, sizeof(struct DNS_HEADER));
srandom(time(NULL)); //
unsigned short a = random();
header->id = htons(a);
printf(“dns id :%d\n”, a);<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值