首页 > 其他分享 >域名解析

域名解析

时间:2024-06-04 21:58:04浏览次数:17  
标签:hostent struct int list 域名解析 include addr

C语言编写:UDP协议的应用:DNS(Domain Name System)服务

将域名解析出一个或多个IP地址

查看man 手册:man 3 gethostbyname

函数原型:

  #include <netdb.h>
   extern int h_errno;
	struct hostent *gethostbyname(const char *name);
   //参数为域名
   返回值是一个地址,指向存储 struct hostent类型的空间
              struct hostent {
               char  *h_name;            /* official name of host */
               char **h_aliases;         /* alias list */
               int    h_addrtype;        /* host address type */
               int    h_length;          /* length of address */
               char **h_addr_list;       /* list of addresses */
           }
           #define h_addr h_addr_list[0] /* for backward compatibility */
//所以我们知道域名对应的IP地址在成员 h_addr_list 数组中,访问该成员就可以得到地址

程序实现:

/********************************************************************************************
*   file name: dns.c
*   author   : [email protected]
*   date     : 2024/06/04
*   function : 将域名解析出一个或多个IP地址
*   note     : None
*
*   CopyRight (c)  2023-2024   [email protected]   All Right Reseverd 
*
*********************************************************************************************/
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define DNS_NAME "www.baidu.com"        //待解析的域名

int main(int argc, char const *argv[])
{
    //定义变量p,并申请内存
    //  struct hostent *p = malloc(sizeof(struct hostent));
    //  if (p == NULL)
    //  {
    //     fprintf(stderr,"malloc error,error num= %d,%s\n",errno,strerror(errno));
    //     exit(1);
    //  }
    //解析域名,用变量p来接受域名解析出来的信息
     struct hostent *p = gethostbyname(DNS_NAME);
     if (p == NULL)
     {
        fprintf(stderr,"malloc error,error num= %d,%s\n",errno,strerror(errno));
        exit(1);
     }
    struct in_addr in;
    int cnt = 0;
    char addr[32];
    //遍历输出域名的IP地址
    while (p->h_addr_list[cnt] != NULL)
    {
        //从结构体中提取地址列表的每一个元素
        in.s_addr =*((uint32_t*)p->h_addr_list[cnt++]);    
        // 将主机信息中的网络字节序转换成本地字节序IP
        strcpy(addr,inet_ntoa(in)); 
        printf("the ip is %s\n",addr);
        bzero(addr,sizeof(addr));
    }
    return 0;
}

结果:

the ip is 183.2.172.185
the ip is 183.2.172.42

标签:hostent,struct,int,list,域名解析,include,addr
From: https://www.cnblogs.com/JinBool/p/18231824

相关文章

  • UDP协议的应用——域名解析
    设计程序实现解析www.baidu.com的域名,把获取到的百度的IP地址全部输出到终端并验证是否正确/*************************************************************************************************************************** filename: udp_cs.c* author :Dazz* d......
  • linux下用域名解析ip地址列表
    linux下用域名解析ip地址列表目录linux下用域名解析ip地址列表头文件/宏定义主函数验证结果头文件/宏定义#include<stdio.h>#include<stdlib.h>#include<netdb.h>#include<arpa/inet.h>主函数/********************************************************************......
  • 什么是动态域名解析?域名怎么解析到内网IP
    首先说说什么是域名解析,域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,把这个IP地址对应相关域名,这就叫域名解析。动态域名与动态域名解析是相互关联的关系,通过动态域名,解决动态IP问题的方式,就叫动态域名解析服务。要实现外网访问内网、......
  • RFS_Server_05 云服务器配置及域名解析
    操作描述:在阿里云购买两项服务【云服务器ECS】和【域名】后,配置云服务器,注册域名,最终实现通过域名访问服务器,需要做以下事情:域名:1.ICP域名备案。此服务由云服务商代理,按照指引填写主体信息、域名用途等信息,等待客服联系通过审核即可。(此次遇到的阿里云客服态度非常不耐烦......
  • 小阿轩yx-DNS域名解析服务分离解析
    小阿轩yx-DNS域名解析服务分离解析分离解析介绍分离解析的域名服务器实际也是主域名服务器这里主要是指根据不同的客户端提供不同的域名解析记录比如来自内网和外网的不同网段地址区域的客户机求解析同一域名时,为其提供不同的解析结果,得到不同的IP地址先开一个系统新添加......
  • DNS域名解析服务02
    一:分离解析1:实验环境部署1:为dns服务器添加两个网卡,并按上图设置各个主机的网络桥接DNS服务器的主机名设置为ns1ns1的ens33网卡的桥接不变(NAT模式)------->内网客户机192.168.10.106(NAT模式)ns1的ens36网卡桥接到仅主机模式------>外网客户机172.16.16.106,桥接为仅主机模式......
  • 11个国内外免费域名解析服务
    11个国内外免费域名解析服务 一般域名使用注册商提供的域名解析服务虽然方便,但功能大多有限,特别是目前国内还会针对某些DNS服务器进行屏蔽,造成网站无法解析的情况出现,因此,使用第三方域名解析服务也是中国网站的必要选择,这里就介绍一些常见的免费域名解析服务。域名注册......
  • 域名解析实际应用 ----DNS
    常用DNSDNS地址114.114.114.114国内移动、电信和联通通用的DNS8.8.8.8GOOGLE公司提供的DNS223.5.5.5和223.6.6.6阿里云DNS首选DNS为:218.2.135.1备用DNS为:61.147.37.1江苏省南京市(中国电信)DNS(DomainNameSystem)解析过程是将域名转换为相应的IP......
  • Linux基础——主机域名解析默认使用IPV6路由
    一、问题描述主机访问内网存储网段,发现域名默认解析的IPV6地址。ping访问ipv4地址正常通讯。主机本地解析/etc/resolv.conf的DNS配置正常。#ping域名默认解析IPV6地址Pingnasgroup.xxxx.xxxx.com#pingipv4地址正常ping-4nasgroup.xxxx.xxxx.com#查看本地DNS配......
  • linux网络DNS域名解析服务
    DNS概述1.DNS系统DNS(DomainNameSystem),使用应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。简单来说就是:把域名转换成网络可以识别的IP地址,在通过IP地址访问主机。这种由文字组成的名称,显而易见要更容易记忆。每......