返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c语言中怎么做域名解析
  • 369
分享到

c语言中怎么做域名解析

2024-04-02 19:04:59 369人浏览 泡泡鱼
摘要

使用C语言实现域名解析的方法c语言代码如下:#include #include #include typedef enum {false = 0, true = !false}bool; typedef struct _DNSHEAD

c语言中怎么做域名解析

使用C语言实现域名解析的方法

c语言代码如下:

#include

#include

#include

typedef enum {false = 0, true = !false}bool;

typedef struct _DNSHEAD{ //dns 头部

USHORT ID;

USHORT tag; // dns 标志(参数)

USHORT nuMQ; // 问题数

USHORT numA; // 答案数

USHORT numA1; // 权威答案数

USHORT numA2; // 附加答案数

}DnsHead;

typedef struct _DNSQUERY //dns 查询结构

{

// char name[64];

// //查询的域名,这是一个大小在0到63之间的字符串

USHORT type;

//查询类型,大约有20个不同的类型

USHORT classes;

//查询类,通常是A类既查询IP地址。

}DnsQuery;

#pragma comment(lib,"ws2_32.lib")

// 初始化操作

bool initWSA();

//显示错误

void displayErrWSA(char *str);

//创建套接字

Socket CreateSocket(int type);

//UDP sendto

int MySendto(SOCKET sockTo, const char FAR * buf,int len,char *addr,USHORT port);

//tcp 连接

bool MyConnect(SOCKET s, char *addr,USHORT );

// UDP recvfrom

int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port);

//设置DNS 头部

bool SetDNSHead(char *name,char *buf);

int main(int arg,char *are[])

{

int Result=0;

char buf[1024]={0};

char addr[16] = "192.168.1.1";// dns 服务器地址

char *name = 0; //要查询的域名

SOCKET sockTo;

int len;

DnsHead *DnsH;

char *getIP;

//int i;

if ( !initWSA() )//初始化

{

displayErrWSA("initWSA err!");

return 1;

}

//创建套接字

if ( (sockTo = CreateSocket(SOCK_DGRAM)) == 0)

{

displayErrWSA("CreatSocket err!");

return 1;

}

while (1)

{

if (arg < 2)

{

char temp[1024]={0};

printf("\n请输入要查询的域名:");

scanf("%s",temp);

if (temp[0] == 'q' ||temp[0] == 'Q')

{

break;

}

name = temp;

}

else

{

arg = 1;

name = are[1];

}

//设置dns 头部

SetDNSHead(name,buf);

//发送出去的请求数据长度

len = sizeof(DnsHead)+sizeof(DnsQuery)+strlen(name)+2;

// for (int i =0;i<50;i+=2)

// {

// printf("x",(UCHAR)buf[i]);

// printf("x ",(UCHAR)buf[i+1]);

// }

//发送DNS 请求

if ( ( Result =MySendto(sockTo,buf,len,addr,53) ) <= 0)

{

displayErrWSA("sendto err!");

continue;

}

//接收应答

if ( (Result =MyRecvFrom(sockTo,buf,1024,addr,53) ) <= 0)

{

displayErrWSA("recvfrom err!");

continue;

}

//简单的取得返回的 IP 地址( 收到的最后4字节 )

DnsH = (DnsHead *)buf;

if (DnsH->numA == 0)

{

printf("无法解析 %s 的IP 地址。\n",name);

continue;

}

getIP =(char *)buf +Result - 4;

printf("%s 的IP地址为: ",name);

for (Result= 0 ;Result<4 ;Result++)

{

printf("%u.",(UCHAR )getIP[Result]);

}

printf("\n");

}

return 0;

}

// 初始化操作

bool initWSA()

{

Word wVersionRequested;

WSADATA wsaData;

int Result;

wVersionRequested = MAKEWORD( 2, 2 );

Result = WSAStartup( wVersionRequested, &wsaData );

if(Result != 0 )

{

return false;

}

if( LOBYTE( wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion)!= 2 )

{

WSACleanup();

return false;

}

return true;

}

SOCKET CreateSocket(int type)

{

SOCKET sock=socket(AF_INET,type,0);

if (sock == INVALID_SOCKET )

{

return 0;

}

return sock;

}

int MySendto(SOCKET sockTo, const char FAR * buf,int len,char *addr,USHORT port)

{

//设置发送数据到的 套接字及地址结构

SOCKADDR_IN addrTo;

addrTo.sin_addr.S_un.S_addr=inet_addr(addr);

addrTo.sin_family=AF_INET;

addrTo.sin_port=htons(port);

return sendto( sockTo, buf, len, 0,

(struct sockaddr *)&addrTo, sizeof(struct sockaddr) );

}

bool MyConnect(SOCKET sockTo, char *addr,USHORT port)

{

int Result;

//设置连接到的 套接字及地址结构

SOCKADDR_IN addrTo;

addrTo.sin_addr.S_un.S_addr=(inet_addr(addr));

addrTo.sin_family=AF_INET;

addrTo.sin_port=htons(port);

//连接

Result = connect(sockTo,(struct sockaddr *)&addrTo,sizeof(SOCKADDR_IN));

if(SOCKET_ERROR == Result)

{

return false;

}

return true;

}

int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port)

{

//设置发送数据到的 套接字及地址结构

int addrlen;

SOCKADDR_IN addrFrom;

addrFrom.sin_addr.S_un.S_addr=inet_addr(addr);

addrFrom.sin_family=AF_INET;

addrFrom.sin_port=htons(port);

addrlen = sizeof(SOCKADDR_IN);

return recvfrom( s, buf, len, 0, (SOCKADDR *)&addrFrom, &addrlen);

}

int ChName(char *fname,char *tname);//域名转化

bool SetDNSHead(char *name,char *buf)

{

DnsHead *DnsH;

DnsQuery *DnsQ;

int NameLen;

memset(buf,0,sizeof(DnsHead));

//设置头部

DnsH = (DnsHead *)buf;

DnsH->ID = (USHORT)1;

DnsH->tag = htons(0x0100);

DnsH->numQ = htons(1);

DnsH->numA = 0;

DnsQ =(DnsQuery *) ( buf+ sizeof(DnsHead) );

NameLen = ChName(name,(char *)DnsQ);

//设置查询信息

DnsQ = (DnsQuery *)( (char *)DnsQ + NameLen );

DnsQ->classes = htons(1);

DnsQ->type = htons(1);

return true;

}

//显示错误信息

void displayErrWSA(char *str)

{

printf("\n%s,err = %d\n",str,WSAGetLastError());

getchar();

}

//域名转化

int ChName(char *fname,char *tname)

{

int j =0;

int i =strlen(fname)-1;

int k = i+1;

tname[i+2] = 0;

for (; i>=0;i--,k--)

{

if (fname[i] == '.')

{

tname[k] = j;

j=0;

}

else

{

tname[k] = fname[i];

j++;

}

}

tname[k] = j;

return strlen(tname)+1;

}

--结束END--

本文标题: c语言中怎么做域名解析

本文链接: https://lsjlt.com/news/114196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • c语言中怎么做域名解析
    使用c语言实现域名解析的方法c语言代码如下:#include #include #include typedef enum {false = 0, true = !false}bool; typedef struct _DNSHEAD...
    99+
    2024-04-02
  • docker中的域名解析怎么做
    在docker容器中设置域名解析的方法首先,打开并进入docker容器;docker exec -it my_web /bin/bash进入到docker容器后,在容器中打开hosts文件;vi /etc/hosts最后,hosts文件打开...
    99+
    2024-04-02
  • 域名泛解析怎么做
    域名泛解析的实现方法:1.登录域名提供商,进入域名控制面板。2.找到域名解析,选择需要泛解析的域名。3.点击添加解析,选择解析类型A记录和CNAME记录都可以。4.然后去服务器上面绑定域名就可以了。...
    99+
    2024-04-02
  • 云服务器怎么做别名解析域名
    在云服务器中做别名解析域的方法:1.进入云服务器管理后台;2.点击“添加域名”选项;3.填写域名;4.点击“添加记录”选项;5.添加CNAME记录,确认;具体步骤如下:首先,在浏览器中进入云服务器管理后台,并在后台中点击“我的域名”选项;进...
    99+
    2024-04-02
  • 虚拟主机怎么做域名解析
    要做虚拟主机的域名解析,您需要按照以下步骤进行操作:1. 登录您的域名注册商的网站,找到域名管理页面。2. 在域名管理页面,找到DN...
    99+
    2023-08-16
    虚拟主机
  • c++中curl无法解析域名怎么解决
    如果cURL在解析域名时遇到困难,可能是由于网络配置问题或cURL库本身的问题。以下是一些可能的解决方案: 确保网络连接正常:首...
    99+
    2024-04-09
    c++
  • namesilo如何做域名解析
    namesilo域名解析教程首先,在计算机中进入namesilo官网;进入到namesilo官网后,在页面中点击“Account domains”,进入域名管理;在域名管理页面中,选择需要解析的域名,并点击“DNS解析”选项;进入DNS解析...
    99+
    2024-04-02
  • centos7如何做域名解析
    在centos7中配置域名解析的方法首先,在centos7命令行中打开NetworkManager.conf 文件;/etc/NetworkManager/NetworkManager.confNetworkManager.conf文件打开...
    99+
    2024-04-02
  • 云服务器怎么做动态域名解析
    云服务器动态域名解析操作方法:登录云服务器提供商平台。打开云服务器管理控制面板。在云服务列表中选择需要解析域名的实例,点击实例,打开管理页面。在管理页面中,点击“添加解析”,选择记录类型和填写需要解析的域名,再点击“确定”保存,等待解析成功...
    99+
    2024-04-02
  • 域名被泛解析后要做什么
    这篇文章主要讲解了“域名被泛解析后要做什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“域名被泛解析后要做什么”吧! 域名被泛解析的情况在何时都是教人担心的,那么在域名被泛解析后我...
    99+
    2023-06-06
  • 怎么解析域名
    解析域名的方法在域名提供商进行解析,解析过程中有不同的记录类型,比如:A记录解析可以指定服务器ip进行解析,在自己的域名管理中,打开域名列表,填写相关信息进行解析。CNAME解析可以将将一个域名指向另一个域名。也是在自己的域名管理中进行解析...
    99+
    2024-04-02
  • 域名解析如何做a记录
    在域名解析中添加a记录的方法首先,在浏览器中进入域名代理商网站;进入到域名代理商网站后,登录到域名管理控制台;在域名管理控制台中选择需要添加a记录的域名,并点击域名解析;进入解析设置页面后,点击“添加解析”按钮;最后,在弹出的添加解析页面中...
    99+
    2024-04-02
  • c语言位域怎么用
    c 语言位域 位域是一种数据类型,允许将数据存储在单个字节或单词的特定位集合中。它使用一个结构来定义位域,其中每个位域成员都有一个特定的偏移量和大小。 使用位域的步骤: 定义结构: ...
    99+
    2024-05-21
    c语言
  • phpstudy怎么域名解析
    在phpstudy中设置域名解析的方法首先,在计算机中打开phpstudy操作界面,并启动phpstudy;phpstudy启动后,在phpstudy中点击“其他选项菜单”按钮;在弹出的下拉中,选择“站点域名管理”选项;最后,在站点域名管理...
    99+
    2024-04-02
  • 中文域名后缀怎么解析
    解析中文域名的方法:1.进入中文域名转码工具网站,将中文域名转换为punycode编码;2.登录到域名管理控制台;3.在域名列表中选择需要解析的中文域名,点击解析;4.填写punycode编码和主机地址,确认即可;解析中文域名后缀的方法首先...
    99+
    2024-04-02
  • ubuntu中怎么设置域名解析
    在ubuntu中设置域名解析的方法首先,在ubuntu中新建一个main.cpp文件,并在文件中添加一下配置;#include #include #include #include extern int h_errno;int main(i...
    99+
    2024-04-02
  • C语言中怎么命名标识符
    这期内容当中小编将会给大家带来有关C语言中怎么命名标识符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解...
    99+
    2023-06-03
  • c语言类型转换怎么做
    c语言中的类型转换可将一种数据类型的值转换为另一种,隐式转换由编译器自动执行,显式转换由程序员通过强制转换符手动指定。隐式转换自动将低精度值转换为高精度值,而显式转换则需要考虑数据丢失、...
    99+
    2024-04-13
    c语言 数据丢失 隐式类型转换 隐式转换
  • CN域名该怎么解析
    本篇文章为大家展示了CN域名该怎么解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 如果说注册域名是搭建网站的第一步,那么第二步就是域名解析了,那么接下来小编就为大家解答一下CN域名怎么...
    99+
    2023-06-06
  • 解析域名怎么操作
    解析域名的操作步骤如下:1. 登录域名管理后台,找到“DNS解析”或“域名解析”等相关设置选项。2. 添加解析记录,包括主机记录、记...
    99+
    2023-06-14
    解析域名 域名
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作