[C++ 网络协议编程] 域名及网络地址

news2024/11/17 13:36:47

1. DNS服务器

DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。

我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地址,DNS服务器会将这个虚拟地址转换为实际地址,即IP地址。若我们直接输入IP地址,则不会发生上面的转换。

如果想获取某个域名对应的IP地址,则可以cmd输入:ping www.baidu.com

如果想获取本机注册的默认的DNS服务器地址,则可以cmd输入:nslookup(windows)、nslookup server(linux)

所有计算机都记录着默认DNS服务器地址,通过这个DNS服务器就能得到相应域名的IP地址信息,如果本机的默认DNS服务器解析不了这个域名,那么就会逐级往上询问,直到根DNS服务器,它直到应该向哪个DNS服务器询问,再向下级DNS专递解析请求,得到IP地址后,返回给发起请求的主机。所以,DNS就是一种层次化管理的分布式数据库系统

2. IP地址和域名之间的转换

IP地址和域名之间的关系:一个IP地址可以对应多个域名,一个域名也可以对应多个IP地址。

通常来说,域名是不会变化的,但是IP地址是可以随时变化的,因为服务器会变化,尤其是像那种有多个服务器进行负载均衡的,就有多个IP地址,所以,我们在编写程序时,要通过用户输入的域名来解析获取IP地址。

2.1 gethostbyname函数(利用域名获取IP地址)

#include <netdb.h>
struct hostnet* gethostbyname(const char* hostname);
成功返回hostnet结构体,失败返回Null指针
struct hostent
{
    char* h_name;
    char** h_aliases;
    int h_addrtype;
    int h_length;
    char** h_addr_list;
}
参数含义
h_name存有官方域名。官方域名代表某一主页,不是所有公司都有
h_aliases其它可以访问这个域名所指向主页的域名。同一个IP可以绑定多个域名。
h_addrtype地址族信息,若是IPv4则是AF_INET,IPv6则是AF_INET6
h_length保存IP地址字节长度。IPV4则是4,IPV6则是16
h_addr_list

以整数形式保存域名对应的IP地址,每个数组实际上是以in_addr结构体存储的。

struct in_addr
{
    in_addr_t      s_addr;        //32位IPv4地址
}

所以在使用时,要进行强制转换为in_addr* 类型

hostent参数结构:

h_addr_list数组实际上是以in_addr结构体存储的,为什么不直接以in_addr数组存储,而是以字符数组存储?

答:是因为为了兼容IPv6地址信息,考虑到通用性,所以用字符数组存储。

那为什么不用void*存储?

答:是因为当时还没有对void指针标准化,当时无法明确指出指针类型时采用的就是char指针。 

2.2 gethostbyaddr函数(利用IP地址获取域名)

#include<netdb.h>
struct hostent* gethostbyaddr(
const char* addr,          //含有IP地址信息的in_addr结构体指针,同时为了传递IPv4地址之外的其他信息,所以声明为char指针
socklen_t len,             //向第一个参数传递的地址信息字节数,IPv4为4,IPv6为16
int family                 //地址族信息
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图论基础和表示(Java 实例代码)

目录 图论基础和表示 一、概念及其介绍 二、适用说明 三、图的表达形式 Java 实例代码 src/runoob/graph/DenseGraph.java 文件代码&#xff1a; src/runoob/graph/SparseGraph.java 文件代码&#xff1a; 图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数…

之前windows安装mysql时没有指定配置文件,现需修改默认端口号

一、之前windows安装mysql 在官网下载指定版本的mysql https://downloads.mysql.com/archives/community/ 我下载的绿色版的mysql解压到了D:\mysql-5.7.29-winx64 在系统变量中新建MYSQL_HOME它的值为D:\mysql-5.7.29-winx64 在系统变量中找到Path然后编辑添加%MYSQL_HOME%\…

开学有哪些好用电容笔值得买?ipad触控笔推荐平价

因为有了Apple Pencil,使得iPad就成了一款便携的生产力配件&#xff0c;其优势在于&#xff0c;电容笔搭配上iPad可以让专业的绘画师在iPad上作画&#xff0c;而且还能画出各种粗细不一的线条&#xff0c;对于有书写需求的学生党来讲&#xff0c;还是很有帮助的。但本人不敢想像…

多线程+隧道代理:提升爬虫速度

在进行大规模数据爬取时&#xff0c;爬虫速度往往是一个关键问题。本文将介绍一个提升爬虫速度的秘密武器&#xff1a;多线程隧道代理。通过合理地利用多线程技术和使用隧道代理&#xff0c;我们可以显著提高爬虫的效率和稳定性。本文将为你提供详细的解决方案和实际操作价值&a…

【1-3章】Spark编程基础(Python版)

课程资源&#xff1a;&#xff08;林子雨&#xff09;Spark编程基础(Python版)_哔哩哔哩_bilibili 第1章 大数据技术概述&#xff08;8节&#xff09; 第三次信息化浪潮&#xff1a;以物联网、云计算、大数据为标志 &#xff08;一&#xff09;大数据 大数据时代到来的原因…

options补充

前言 .NET Core 引入了Options模式&#xff0c;使用强类型的类来表达配置项&#xff0c;提供了三种在不同场景下的使用接口&#xff1a; IOptions IOptionsSnapshot IOptionsMonitor 但是常常不知道什么时候使用哪种方式才最合适&#xff0c;接下来我就用代码详细解读一下三种…

Python自动化小技巧20——python代码自动另存为文件

案例背景 我在使用openpyxl写入excel的公式的时候&#xff0c;我发现直接wb.save()存下来后&#xff0c;再进行读取的话&#xff0c;公式格子都是空值&#xff0c;需要手动另存为才会算出数值来...这太麻烦了&#xff0c;我写个周报算数据就是为了用代码自动化...还要手动另存…

「Paraverse平行云」助力数字栩生突破超写实数字人“千言”的实时交互挑战

“超写实数字人”一直是图形学界的圣杯之一&#xff0c;力求在虚拟世界中创造出逼真无比的3D人类角色&#xff0c;并使其能够实时与用户进行互动&#xff0c;营造身临其境的虚拟体验&#xff0c;超写实手语主持人“千言”便是“超写实数字人”领域的佼佼者。 “千言”由数字栩…

2337. 移动片段得到字符串

给你两个字符串 start 和 target &#xff0c;长度均为 n 。每个字符串 仅 由字符 L、R 和 _ 组成&#xff0c;其中&#xff1a; 字符 L 和 R 表示片段&#xff0c;其中片段 L 只有在其左侧直接存在一个 空位 时才能向 左 移动&#xff0c;而片段 R 只有在其右侧直接存在一个 …

Linux内核学习(四)—— 系统调用(基于Linux 2.6内核)

在现代操作系统中&#xff0c;内核提供了用户进程与内核进行交互的一组接口&#xff0c;这些接口在应用程序和内核之间扮演了使者的角色。这些接口保证了系统的稳定可靠&#xff0c;避免应用程序肆意妄行。 一、与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中…

阿里云——云存储:对象存储管理与安全

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 一.传统存储介绍&#xff1a; 1.存储的发展历史 2.硬盘发展历史与趋势 3.SDD硬盘介…

谷歌浏览器最新版本进行控制台调试js代码时候无法显示代码行数

问题描述 谷歌浏览器打开控制台进行js代码调试&#xff0c;js代码没有行数显示想当难受 原因分析&#xff1a; 最新版本谷歌浏览器进行了自动设置关闭那个功能&#xff0c;要自己去设置 解决方案&#xff1a; 最终效果 舒服了

用C++/JS/Python/Java代码描述秋天的味道

前言 秋天是一个充满诗意和浪漫的季节&#xff0c;它带来了清新、芬芳和美食的味道。让我们一起探索如何用编程语言来写出秋天味道的代码吧&#xff01;无论是C、JavaScript、Python还是Java&#xff0c;以下是几个简单的步骤来帮助你创造出充满秋天味道的代码&#xff1a; …

ChatGPT的创造力已达到人类顶尖水平-蒙大拿大学研究

美国蒙大拿大学的一项新研究表明&#xff0c;ChatGPT的创造力已经达到了前1%的人类思想家水平。研究人员对ChatGPT进行了托兰斯创造力思维测验&#xff08;TTCT&#xff0c; Torrance Tests of Creative Thinking&#xff09;&#xff0c;并记录了8个回答。此外&#xff0c;他们…

C++破坏电脑病毒

写了这么多python病毒&#xff0c;今天我来给大家分享一个C病毒。 创作背景&#xff1a;我有个同学对电脑十分精通&#xff0c;而且对MBR十分感兴趣&#xff0c;他跟我分享了他怎么把MBR搞报废的历程。听完之后&#xff0c;我开始研究MBR。用python研究了2个月&#xff0c;结果…

Apache和Nginx各有什么优缺点,应该如何选择?

Apache和Nginx各有什么优缺点&#xff0c;应该如何选择&#xff1f; Apache和Nginx都有各自的优点和缺点&#xff0c;选择应该根据您的具体需求而定。Nginx的优点包括&#xff1a;轻量级&#xff0c;与同等web服务相比&#xff0c;Nginx占用更少的内存和资源&#xff1b;抗并发…

面试热题(不同的二分搜索树)

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 经典的面试题&#xff0c;这部分涉及了组合数学中的卡特兰数&#xff0c;如果对其不清楚的同学可以去看我以前的博客卡特兰数 …

stack,queue,deque的使用

1.stack是后进先出的&#xff0c;这也影响其对应的接口&#xff0c;所能实现的功能也有限&#xff0c;其中主要的功能如下&#xff1a; void test_stack1() {stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);st.push(6);while (!st.empty()){c…

代码随想录打卡—day24—【回溯】— 基础,最新820 8.21 todo

1 理论基础 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯算法——回溯和递归是相辅相成的。回溯法的效率&#xff0c;回溯法其实就是暴力查找&#xff0c;并不是什么高效的算法。回溯法解决的问题都可以抽象为树形结构&#xff08;N叉树&#xff09; 1.1…

Linux面试笔试题(1)

1、以长格式列目录时&#xff0c;若文件test的权限描述为&#xff1a;drwxrw-r–&#xff0c;则文件test的类型及文件主的权限是__A____。 A.目录文件、读写执行 B.目录文件、读写 C.普通文件、读写 D.普通文件、读 在这个问题中&#xff0c;我们需要解析文件权限的描述&…