当前位置: 首页 > news >正文

怎么自己给自己的网站做推广/济南谷歌推广

怎么自己给自己的网站做推广,济南谷歌推广,王也微信头像图片,东营网站关键字优化DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…

DNS 概述

        域名系统 DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。我们都知道,IP 地址是由 32 位的二进制数字组成的。用户与因特网上某台主机通信时,显然不愿意使用很难记忆的长达 32 位的二进制主机地址。即使是点分十进制 IP 地址也并不太容易记忆。相反,大家愿意使用比较容易记忆的主机名字。但是,机器在处理 IP 数据报时,并不是使用域名而是使用 IP 地址。 这是因为 IP 地址长度固定,而域名的长度不固定,机器处理起来比较困难。
        例如,www.baidu.com 就是一个域名,那么域名解析的过程就是:
www.baidu.com-->DNS 服务器(把域名转成 IP)-->转换为 IP(http://14.215.177.39/)

DNS 协议运行在 UDP 协议上面,是一个 UDP 的“回显”程序,使用 53 号端口

因特网的域名结构

从语法上讲,每一个域名都是有标号(label)序列组成,而各标号之间用点(小数点)隔开。如下例子所示:

        上图这是中央电视台用于手法电子邮件的计算机的域名,它由三个标号组成,其中标号com 是顶级域名,标号 cctv 是二级域名,标号 mail 是三级域名。
        DNS 规定,域名中的标号都有英文和数字组成, 每一个标号不超过 63 个字符 ( 为了记忆方 便,一般不会超过 12 个字符 ) ,也不区分大小写字母。
        级别最低的域名写在最左边,而级别最高的字符写在最右边。由多个标号组成的完整域名总共不超过 255 个字符。
        DNS 既不规定一个域名需要包含多少个下级域名,也不规定每一级域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由 ICANN 进行管理。用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。

DNS 协议

首部格式

        DNS 请求与响应的格式是一致的,其头部分为 Header Question Answer Authority
Additional5 部分,如下图所示:

Header 部分是一定有的,长度固定为 12 个字节;其余 4 部分可能有也可能没有,并且长度也不一定,这个在 Header 部分中有指明。 Header 的结构如下:

下面说明一下各个字段的含义 :
1. 标识符:占 16
        ID:占 16 位。该值由发出 DNS 请求的程序生成,DNS 服务器在响应时会使用该 ID,这样便于请求程序区分不同的 DNS 响应。
2. 标志:占 16
        QR:占 1 位。指示该消息是请求还是响应。0 表示请求;1 表示响应。
        OPCODE:占 4 位。指示请求的类型,有请求发起者设定,响应消息中复用该值。0 表示标准查询;1 表示反转查询;2 表示服务器状态查询。3~15 目前保留,以备将来使用。
        AA(Authoritative Answer,权威应答):占 1 位。表示响应的服务器是否是权威DNS 服务器。只在响应消息中有效。
        TC(TrunCation,截断):占 1 位。指示消息是否因为传输大小限制而被截断。
        RD(Recursion Desired,期望递归):占 1 位。该值在请求消息中被设置,响应消息复用该值。如果被设置,表示希望服务器递归查询。但服务器不一定支持递归查询。
        RA(Recursion Available,递归可用性):占 1 位。该值在响应消息中被设置或被清除,以表明服务器是否支持递归查询。
        Z:占 3 位。保留备用。
        RCODE(Response code):占 4 位。该值在响应消息中被设置。取值及含义如下:
                0:No error condition,没有错误条件;
                1:Format error,请求格式有误,服务器无法解析请求;
                2:Server failure,服务器出错。
                3:Name Error,只在权威 DNS 服务器的响应中有意义,表示请求中的域名不存在。
                4:Not Implemented,服务器不支持该请求类型。
                5:Refused,服务器拒绝执行请求操作。
                6~15:保留备用。QDCOUNT:占 16 位(无符号)。指明 Question 部分的包含的实体数量。
        ANCOUNT:占 16 位(无符号)。指明 Answer 部分的包含的 RR(Resource Record)数 量。
        NSCOUNT:占 16 位(无符号)。指明 Authority 部分的包含的 RR(Resource Record)数量。
        ARCOUNT:占 16 位(无符号)。指明 Additional 部分的包含的 RR(Resource Record)数量。

数据区域

查询名:
        查询名部分长度不定,一般为要查询的域名(也会有 IP 的时候,即反向查询)。 此部分由一个或者多个标示符序列组成,每个标示符以首字节数的计数值来说明该标示符长度,每个名字以 0 结束。计数字节数必须是 0~63 之间。该字段无需填充字节。还是借个例子来说明更直观些,查询名为 http://gemini.tuc.noao.edu 的话,查询名字段如下
查询类型:

查询类:
        一般为 IN(枚举值 1) ,即 Internet 数据

DNS 客户端程序实例

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/socket.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>int sock;
struct sockaddr_in sa;/*
generate_question:解析域名数据
*/
void generate_question(char*dns_name,char*buf,int*len)
{char*pos = dns_name;//指向域名当前位置char*ptr = buf;int n = 0;*len = 0;while(1){n = strlen(pos) - (strstr(pos , ".") ? strlen(strstr(pos , ".")) : 0);//在 pos 中查找"."子串//返回"."在 pos 中第一次出现的地址,若没有找到返回 NULLprintf("%d\n", n);*ptr++ = (unsigned char)n;memcpy(ptr,pos,n);printf("%lu\n",strlen(ptr));printf("%s\n", ptr);*len += n + 1;ptr += n;if(!strstr(pos , ".")){*ptr = (unsigned char)0;ptr ++;*len += 1;break;}pos += n + 1;printf("%s\n", pos);}
}/*
send_dns_request:解析域名数据,并发送数据包
*/
void send_dns_request(char * dns_name)
{unsigned char request[256] = {0}; //保存整个请求报文unsigned char *ptr = request;unsigned char question[128];//存储域名解析数据int question_len;//产生请求(把字符串表示的域名转换成 DNS 要求的格式)generate_question(dns_name , question ,&question_len);printf("%s\n", question);printf("%d\n", question_len);*((unsigned short*)ptr) = 1; //会话标识 IDptr += 2;*((unsigned short*)ptr) = htons(0x0100); //flagsptr += 2;*((unsigned short*)ptr) = htons(1); //Quetions 问题数,通常为 1ptr += 2;*((unsigned short*)ptr) = 0;ptr += 2;*((unsigned short*)ptr) = 0;ptr += 2;*((unsigned short*)ptr) = 0;ptr += 2;//把域名(www.baidu.com)装换为相应的问题格式保存在此处,以\0 结尾memcpy(ptr , question , question_len);ptr += question_len;*((unsigned short*)ptr) = htons(1); //获取 IPV4 地址,查询类型ptr += 2;*((unsigned short*)ptr) = htons(1); //指互联网地址,查询类,一般为 1,表明是 Internet 数据int re = sendto(sock, request,question_len+16 ,0, (structsockaddr*)&sa, sizeof(sa));printf("re = %d\n",re);int i;for(i=0;i<re;i++)//以 16 进制格式打印出来{printf("%02X ",(unsigned char)request[i]);} printf("===================\n");
}/*recv_dns_response:获取域名所对应的 IP 地址,并打印
*/
void recv_dns_response()
{struct sockaddr_in src_addr;socklen_t addrlen = sizeof(src_addr);char buf[255] = {0};int r = recvfrom(sock, buf, 255, 0, (struct sockaddr*)&src_addr,&addrlen);printf("r == %d\n", r);if(r > 0)//收到大于 0 的数据{int i;for(i=r-4;i<r;i++)//以 16 进制格式打印出来{if(i != r-1)printf("%d.",(unsigned char)buf[i]);elseprintf("%d\n",(unsigned char)buf[i]);} }
}//例./main www.baidu.com
int main(int argc, char *argv[])
{if(argc != 2){printf("Usage : %s <domain name>\n",argv[0]);return -1;}//step 1: 创建一个套接字sock = socket(AF_INET, SOCK_DGRAM, 0);if (sock == -1){perror("socket error:");return -1;}//step 2: 绑定一个地址(ip+端口号)memset(&sa, 0,sizeof(sa));sa.sin_family = AF_INET;sa.sin_port = htons(53); //按"网络字节序"来保存一个整数sa.sin_addr.s_addr = inet_addr("114.114.114.114");//发送解析请求send_dns_request(argv[1]);//接收分析结果recv_dns_response();close(sock);return 0;
}

可以看到当按正确的报文形式发送给 DNS 服务器后,接收到的报文后面四个字节存储了解析的 IP 地址

域名解析函数(gethostbyname)

【头文件】
#include <netdb.h>
#include <sys/socket.h>
extern int h_errno;
【函数原型】
struct hostent *gethostbyname(const char *name);
【函数功能】
        使用域名或主机名获取地址
【参数含义】
        [name]: 待解析的域名或主机名
【返回值】
        失败返回 NULL 指针
        成功返回的非空指针指向如下的 hostent 结构体指针
struct hostent
{char *h_name; /* 主机正式名称 */char **h_aliases; /* 别名列表。 */int h_addrtype; /* 主机地址类型。*/int h_length; /* 地址的长度。 */char **h_addr_list; /*来自名称服务器的地址列表。 */#ifdef __USE_MISC# define h_addr h_addr_list[0] /* 地址,用于向后兼容。*/#endif
};
【示例】
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
extern int h_errno;int main(int argc, char **argv)
{if (argc != 2) {printf("Use example: %s www.google.com\n", *argv);return -1;}char *name = argv[1];struct hostent *hptr;hptr = gethostbyname(name);if (hptr == NULL) {printf("gethostbyname error for host: %s: %s\n", name, hstrerror(h_errno));return -1;}//输出主机的规范名printf("\tofficial: %s\n", hptr->h_name);//输出主机的别名char **pptr;char str[INET_ADDRSTRLEN];for (pptr=hptr->h_aliases; *pptr!=NULL; pptr++) {printf("\ttalias: %s\n", *pptr);}//输出 ip 地址switch (hptr->h_addrtype) {case AF_INET:pptr = hptr->h_addr_list;for (; *pptr!=NULL; pptr++) {printf("\taddress: %s\n",inet_ntop(hptr->h_addrtype, hptr->h_addr, str, sizeof(str)));}break;default:printf("unknown address type\n");break;}return 0;
}

获取本地主机名(gethostname)

【头文件】
#include <unistd.h>
【函数原型】
int gethostname(char *name, size_t len);
【函数功能】
        获取本地主机名
【参数含义】
        [name]: 保存获取的主机名
        [len]: naem 的最大长度
【返回值】
        成功返回 0,失败返回-1
【示例】
char buf[256] = {0};
int t = gethostname(buf,256);
if(t == 0)
{printf("%s\n",buf);
}

设置本地主机名(sethostname)

【头文件】
#include <unistd.h>
【函数原型】
int sethostname(const char *name, size_t len);
【函数功能】
        设置本地主机名
【参数含义】
        [name]: 设置的主机名
        [len]: naem 的最大长度
【返回值】
        成功返回 0,失败返回-1
【示例】
sethostname ( "jiuyue" , 6 );

相关文章:

域名系统 DNS

DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统&#xff0c;用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢&#xff1f;这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…...

Vue $nextTick 模板解析后在执行的函数

this.$nextTick(()>{ 模板解析后在执行的函数 })...

VBA技术资料MF76:将自定义颜色添加到调色板

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

zilong-20231030

1)k个反转 2)n&#xff01;转12进制 求末尾多少0 一共有几位 &#xff08;考虑了溢出问题&#xff09; 3)大量数据获取前10个 4)reemap地城结构 5)红黑树规则特性 6)热更 7)压测 8)业务 跨服实现 9)有哪些线程以及怎么分配...

目标检测算法发展史

前言 比起图像识别&#xff0c;现在图片生成技术要更加具有吸引力&#xff0c;但是要步入AIGC技术领域&#xff0c;首先不推荐一上来就接触那些已经成熟闭源的包装好了再提供给你的接口网站&#xff0c;会使用别人的模型生成一些图片就能叫自己会AIGC了吗&#xff1f;那样真正…...

React 生成传递给无障碍属性的唯一 ID

useId() 在组件的顶层调用 useId 生成唯一 ID&#xff1a; import { useId } from react; function PasswordField() { const passwordHintId useId(); // ...参数 useId 不带任何参数。 返回值 useId 返回一个唯一的字符串 ID&#xff0c;与此特定组件中的 useI…...

十种排序算法(1) - 准备测试函数和工具

1.准备工作 我们先写一堆工具&#xff0c;后续要用&#xff0c;不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…...

IRF联动 BFD-MAD

文章目录 IRF堆叠一、主设备配置二、备设备配置三、验证 MAD检测一、MAD检测二、MAD验证 本实验以2台设备进行堆叠示例&#xff0c;按照配置顺序&#xff0c;先配置主设备&#xff0c;再配置备设备。在IRF配置前暂时先不接堆叠线&#xff0c;按步骤提示接线。 IRF堆叠 一、主设…...

双向链表的初步练习

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”…...

IDE的组成

集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09;是用于提供程序开发环境的应用程序&#xff0c;一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务…...

项目解读_v2

1. 项目介绍 如果使用task2-1作为示例时&#xff0c; 运行process.py的过程中需要确认 process调用的是函数 preprocess_ast_wav2vec(wav, fr) 1.1 任务简介 首个开源的儿科呼吸音数据集&#xff0c; 通过邀请11位医师标注&#xff1b; 数字听诊器的采样频率和量化分辨率分…...

杀毒软件哪个好,杀毒软件有哪些

安全杀毒软件是一种专门用于检测、防止和清除计算机病毒、恶意软件和其他安全威胁的软件。这类软件通常具备以下功能&#xff1a; 1. 实时监测&#xff1a;通过实时监测计算机系统&#xff0c;能够发现并防止病毒、恶意软件等安全威胁的入侵。 2. 扫描和清除&#xff1a;可以…...

Ubuntu上安装配置Nginx

要在 Ubuntu 上安装 Nginx&#xff0c;请按照以下步骤进行操作&#xff1a; 打开终端&#xff1a;可以使用快捷键 Ctrl Alt T 打开终端&#xff0c;或者在开始菜单中搜索 “Terminal” 并点击打开。 更新软件包列表&#xff1a;在终端中运行以下命令&#xff0c;以确保软件包…...

C++之string

C之string #include <iostream>using namespace std;/*string();//创建一个空的字符串string(const char* s);//使用字符串s初始化string(const string& str);//使用一个string对象初始化另外一个string对象string(int n,char c);//使用n个字符c初始化*/void test1()…...

多线程---单例模式

文章目录 什么是单例模式&#xff1f;饿汉模式懒汉模式版本一&#xff1a;最简单的懒汉模式版本二&#xff1a;考虑懒汉模式存在的线程安全问题版本三&#xff1a;更完善的解决线程安全问题版本四&#xff1a;解决指令重排序问题 什么是单例模式&#xff1f; 单例模式&#xf…...

SpringBoot相比于Spring的优点(自动配置和依赖管理)

自动配置 例子见真章 我们先看一下我们Spring整合Druid的过程&#xff0c;以及我们使用SpringBoot整合Druid的过程我们就知道我们SpringBoot的好处了。 Spring方式 Spring方式分为两种&#xff0c;第一种就是我们使用xml进行整合&#xff0c;第二种就是使用我们注解进行简化…...

SAP SPAD新建打印纸张

SAP SPAD新建打印纸张 1.事务代码SPAD 2.完全管理&#xff0d;设备类型&#xff0d;页格式-显示(创建格式页) 3.按标准A4纸张为模板参考创建。同一个纸张纵向/横向各创建1次(创建格式页) 4.完全管理&#xff0d;设备类型&#xff0d;格式类型-显示(创建格式类型&#xff0…...

C# 图解教程 第5版 —— 第11章 结构

文章目录 11.1 什么是结构11.2 结构是值类型11.3 对结构赋值11.4 构造函数和析构函数11.4.1 实例构造函数11.4.2 静态构造函数11.4.3 构造函数和析构函数小结 11.5 属性和字段初始化语句11.6 结构是密封的11.7 装箱和拆箱&#xff08;*&#xff09;11.8 结构作为返回值和参数11…...

车载电子电器架构 —— 基于AP定义车载HPC

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

Redis原理-IO模型和持久化

高性能IO模型 为什么单线程Redis能那么快 一方面&#xff0c;Redis 的大部分操作在内存上完成&#xff0c;再加上它采用了高效的数据结构&#xff0c;例如哈希表和跳表&#xff0c;这是它实现高性能的一个重要原因。另一方面&#xff0c;就是 Redis 采用了多路复用机制&#…...

PID控制示例

PID控制简单示例 import numpy as np import matplotlib.pyplot as plt import copy# 定义曲线函数 y sin(x) def target_curve(x):return np.sin(x)class PID:def __init__(self, kp, ki, kd):self.kp kpself.ki kiself.kd kdself.ep 0.0self.ei 0.0self.ed 0.0self.d…...

GoLand GC(垃圾回收机制)简介及调优

GC(Garbage Collector)垃圾回收机制及调优 简单理解GC机制 其实gc机制特别容易理解&#xff0c;就是物理内存的自动清理工。我们可以把内存想象成一个房间&#xff0c;程序运行时会在这个房间里存放各种东西&#xff0c;但有时候我们会忘记把不再需要的东西拿出去&#xff0c…...

AI:40-基于深度学习的森林火灾识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

基于MATLAB平台的图像去噪&#xff0c;锐化&#xff0c;边缘检测&#xff0c;程序已调试通过&#xff0c;可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)...

通过Metasploit+Ngrok穿透内网长期维持访问外网Android设备

前言: 因为之前作为小白我不会在Kali Linux里面把IP映射出外网&#xff0c;卡在那个地方很久&#xff0c;后来解决了这个问题就写方法出来和大家分享分享。 环境&#xff1a; Kali Linux系统(https://www.kali.org/downloads/) Metasploit Ngrok Linux64位的端口转发工具(htt…...

STM32 CubeMX配置USB HID功能,及安装路径

STM32CubeMX学习笔记&#xff08;46&#xff09;——USB接口使用&#xff08;HID自定义设备&#xff09; STM32CubeMX实现STM32 USBHID双向64字节通信(下位机部分) STM32 USB HID设置(STM32CubeMX) 关于keil 5安装出现Fail to set path to Software Packs.问题解决方法...

【错误解决方案】ModuleNotFoundError: No module named ‘transformers‘

1. 错误提示 在python程序中&#xff0c;尝试导入一个名为transformers的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named ‘transformers‘ 2. 解决方案 所遇到的问题是Python无法找到名为transformers的模块&am…...

Mac 配置环境变量

Mac 配置环境变量 修改配置文件 vim ~/.bash_profile i进入编辑模式. Esc&#xff1a;wq 保存文件 esc:q 退出 如&#xff1a;jdk环境变量配置 JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home CLASSPATH J A V A H O M E / l i b / t o o l…...

如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载

如何在linux服务器上安装Anaconda与pytorch&#xff0c;以及pytorch卸载 1&#xff0c;安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下…...

ansble

ansble概述 Ansible是一款自动化运维工具&#xff0c;基于Python开发&#xff0c;具有批量系统配置,批量程序部署, 批量运行命令等功能。 Ansible的很多模块在执行时都会先判断目标节点是否要执行任务&#xff0c;所以&#xff0c;可以放心大胆地让Ansible去执行任务&#xf…...