DNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。

域名:提供网络服务的服务器端也是通过IP地址区分的,IP地址非常难记。因此将容易记、易表述的域名分配取代IP地址。

DNS服务器:域名是赋予服务器端的虚拟地址,而非实际地址。因此,需要将虚拟地址转化为实际地址。那如何将域名变为IP地址呢?可以向DNS服务器请求转换地址。

所有计算机中都记录着默认DNS服务器地址,就是通过这个默认DNS服务器得到相应域名的IP地址信息。在浏览器地址栏中输入域名后,浏览器通过默认DNS服务器获取该域名对应的IP地址信息,之后真正的接入网站。
       计算机内置的默认DNS服务器并不知道网络上所有域名的IP地址信息。若该DNS服务器无法解析,则会询问其他DNS服务器,并提供给用户。因为DNS是层次化管理的一种分布式数据库系统,当默认DNS服务器收到自己无法解析的请求时,向上级DNS服务器询问。通过这种方式逐级向上传递信息,达到顶级DNS服务器----根DNS服务器时,它知道向哪个DNS服务器询问。

IP地址和域名之间的转换
1、利用域名获取IP地址
使用以下函数可以通过传递字符串格式的域名获取IP地址

#include<netdb.h>
struct hostent* gethostbyname(const char *hostname);
---成功时返回hostent结构体地址,失败时返回NULL指针

只要传递域名字符串,就会返回域名对应的IP地址。只是返回时,地址信息装入hostent结构体。此结构体定义如下:

struct hostent
{char*  h_name;     //官方域名char** h_aliases;  int    h_addrtype; //地址类型 int    h_length;   //地址长度char** h_addr_list;//地址列表
}

h_name----该变量中存有官方域名
h_aliases----可以通过多个域名访问同一主页,同一IP可以绑定多个域名。因此,除了官方域名外还可指定其他域名,这通过h_aliases获得
h_addrtype----gethostbyname函数不仅支持IPv4还支持IPv6,因此可以通过此变量获取保存在h_addr_list的IP地址的地址族信息。若是IPv4,则此变量存有AF_INET。
h_length----保存IP地址长度。若是IPv4,4个字节,保存4;IPv6时,因为16个字节,故保存16
h_addr_list----通过此变量以整数形式保存域名对应的IP地址。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<netdb.h>
void error_handling(char *message);int main(int argc,char **argv)
{int i;struct hostent *host;if(argc!=2){printf("Usage:%s<addr>\n",argv[0]);exit(1);  }host=gethostbyname(argv[1]);if(!host)error_handling("gethost error");printf("Official name:%s \n",host->h_name);for(i=0;host->h_aliases[i];i++)printf("Aliases %d:%s \n",i+1,host->h_aliases[i]);printf("Address type:%s \n",(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");for(i=0;host->h_addr_list[i];i++)printf("IP addr %d:%s \n",i+1,inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));return 0;
}void error_handling(char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);
}

2、利用IP地址获取域名
gethostbyaddr函数利用IP地址获取域名相关信息

#include<netdb.h>
struct hostent *gethostbyaddr(const char* addr,socklen_t len,int family)
---成功时返回hostent结构体变量地址值,失败时返回NULL指针

addr---含有IP地址信息的in_addr结构体指针
len---向第一个参数传递的地址信息的字节数,IPv4时为4,IPv6时为16
family---传递地址族信息,IPv4时为AF_INET,IPv6时为AF_INET6

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<netdb.h>
void error_handling(char *message);int main()
{int i;struct hostent *host;struct sockaddr_in addr;if(argc!=2){printf("Usage:%s<IP>\n",argv[0]);exit(1);}memset(&addr,0,sizeof(addr));addr.sin_addr.s_addr=inet_addr(argv[1]);host=gethostbyaddr((char*)&addr.sin_addr,4,AF_INET);if(!host)error_handling("gethost error");printf("Official name:%s \n",host->h_name);for(i=0;host->h_aliases[i];i++)printf("Aliases %d:%s \n",i+1,host->h_aliases[i]);printf("Address type:%s \n",(host->h_addrtype==AF_INET)?"AF_INET":"AF_INET6");for(i=0;host->h_addr_list[i];i++)printf("IP addr %d:%s \n",i+1,inet_ntoa(*(struct in_addr*)host->h_addr_list[i]));return 0;
}void error_handling(char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);
}

DNS域名和网络地址相关推荐

  1. 渗透测试之DNS域名信息探测实验

    渗透测试之DNS域名信息探测实验 实验目的 一.实验原理 1.1 域名 1.2 .域名的构成 1.3 域名的基本类型 1.4 域名级别 二.实验环境 2.1 操作机器 三.实验步骤 1. 使用sp查询 ...

  2. Kubernetes--Pod的DNS域名和相关特性

    一.Pod的DNS域名 Pod作为集群中提供具体服务的实体,也可以像Service一样设置DNS域名.另外,系统为客户端应用Pod提供需要使用的DNS策略提供多种选择. 对Pod来说,Kubernet ...

  3. Android中DNS域名劫持问题-解决方案

    前言 在客户端进行业务接口请求时,往往会在线上出现解析JSON响应内容失败而导致的应用崩溃,但是在实际开发测试过程中却没有遇到此问题.解决办法就是对JSON解析进行异常捕获,然后将实际响应内容上报到服 ...

  4. 网络DNS域名转换成IP地址

    网络DNS域名转换成IP地址(完整代码,测试通过) using System; using System.Collections.Generic; using System.Linq; using S ...

  5. 如何使用OpenDNS有效解决DNS域名劫持?

    如何使用OpenDNS解决DNS域名劫持?很多用户都有遇到过DNS域名被劫持的情况,遇到域名被劫持,最好的解决办法就是使用国外更为安全可靠的DNS服务器,这里小编推荐大家使用OpenDNS提供的DNS ...

  6. 网络安全:、dns被劫持怎么解决DNS域名劫持的几种解决方法

    dns的快慢与稳定与否,关系着浏览时的正常;更有甚者,dns的健康与否,更会直接影响各个拨号客户端的健康. 现在国内上网的用户,大多家用的都是用的网通或者电信的adsl,这中间还分各省地区的拨号服务器 ...

  7. DNS域名 网址后缀的含义

    Ptw-cwl DNS顶级域名 域名 含义 com 商业组织,比如HP,Sun,IBM公司等 edu 教育机构,比如U.C.Berkeley,Stanford University,MIT等 gov ...

  8. DNS域名称空间的组织方式

    按其功能命名空间中用来描述 DNS 域名称的五个类别的介绍详见下表中,以及与每个名称类型的示例.

  9. DNS 域名层次结构

    DNS域名空间与委派机制 DNS 系统采用的是分布式的解析方案,整个 DNS 架构是一种层次树状结构,这个树状结构称为 DNS 域名空间,如图: 树状结构最顶层称为根域,用 "." ...

最新文章

  1. binary格式和ELF格式区别。用ida打开的样子
  2. [摘录]第五章 与奋斗者分享利益
  3. list python 转tensor_Tensorflow模型量化4 --pb转tflite(uint8量化)小结
  4. 软考网络工程师学习笔记6-无线通信网
  5. 同余定理在算法求解中的应用
  6. PHP中的异常和错误(转载)
  7. css3中旋转坐标轴的问题
  8. php生成图片不显示,php绘图不显示图片怎么办
  9. ISO19000-2000标准(转载)
  10. G代码在运动控制器上的应用
  11. 硬笔行书字帖3500常用字_2018年【成年人实用硬笔行书】一对一直播培训简介
  12. c语言快速学习,怎么才能正确快速的学习c语言
  13. Debian10上使用360随身Wifi
  14. 孩子,外面的世界不会轻易原谅你…
  15. HCIE 面试资料-OSPF
  16. UI界面设计八大原则
  17. 自上而下语法分析器python
  18. lqc_shell批量操作linux主机
  19. MySQL-Test-Run测试工具
  20. 盘点国产数据库年终排行(2021)

热门文章

  1. Raptor-博客进展(持续记录)
  2. ApexCharts使用示例 -- 多图表同时执行交互操作
  3. 大一新生面临问题讨论
  4. excel中多条件判断求和
  5. Vs2005下重复定义的问题解决
  6. 前缀加加和后缀加加重载
  7. 常用的几种BGA焊点缺陷或故障检测方法
  8. 粮油企业MES系统源码 粮油质量管控防伪溯源系统
  9. 给el-table表头加必选星号 - vue篇
  10. 太原住宅小区型分户计费节能管理系统TKD-CAS 电力载波技术 节电效率高-节能环保