Wireshark之Intro, HTTP, DNS

源码地址👇

moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络-自顶向下方法(原书第6版)》编程作业,Wireshark实验文档的翻译和解答。 (github.com)

目录

🌼Introduce

🎧前置

🎧过程

🎧课后问题

🌼HTTP

💴GET / response交互 

💴HTTP消息格式

💴检索大型HTML文件(长文件)

💴检索具有嵌入对象的HTML文件

💴HTTP认证和安全性

🌼DNS

📱前置

📱过程

(一)nslookup

(二)ipconfig

(三)WireShark 追踪 DNS


🌼Introduce

结合这个视频做WireShark实验👇

2.WireShark抓包入门操作_哔哩哔哩_bilibili

Introduce的博客

Wireshark实验——入门 - 乌漆WhiteMoon - 博客园 (cnblogs.com)

新手全流程Wireshark博客(建议跟一遍)

wireshark抓包新手使用教程 - jack_Meng - 博客园 (cnblogs.com)

🎧前置

首先,WireShark 是一个使用计算机中 packet capture(pcap) 的 packet analyzer,是免费的网络协议分析器,可在 Windows,Mac 和 Linux / Unix 计算机上运行

可以运行在使用 以太网,串行(PPP 和 SLIP),802,11无线局域网 和 许多其他链路层技术的计算机上

packet sniffer(分组嗅探器)

观察执行协议实体之间交换信息的基本工具

(1)sniffer 计算机发送 / 接收的消息

(2)存储并捕获消息中的协议字段内容

(3)接收的是机器的应用程序和协议,发送 / 接收分组的 “副本”

👆上图是 packet sniffer 的结构,右侧为应用层,传输层,网络层,链路层,物理层的协议

(当前为 Internet 协议)和应用程序(比如Web浏览器 或 ftp客户端)

虚线框的 packet sniffer 包含 2 部分:

(1) packet capture(分组捕获库)

接收链路层的副本

较高层协议(HTTP,FTP,DNS;TCP,UDP;IP...)交换的消息最终被封装在(通过物理介质传输的)链路层中,例如以太网电缆。

图中,假设物理介质是以太网,那么所有上层协议最终被封装在以太网帧中

捕获所有链路层帧,即可获得所有协议和应用程序 发送 / 接收 的消息

(2) packet analyzer(分组分析器)

显示协议消息中所有字段的内容

为了做到这一点,packet analyzer 需要 “理解” 协议交换所有消息的结构

举个例子👇

假设在 HTTP 协议交换消息显示各种字段,packet analyzer

了解以太网帧的格式 --> 识别以太网帧的 IP 数据报

理解 IP 数据报格式 --> 提取 IP 数据包里的 TCP 段

理解 TCP 段结构 --> 提取 TCP 段中包含的 HTTP 消息

理解 HTTP 协议 --> 知道 HTTP 消息第一部分包含字符串 "GET", "POST", "HEAD"

🎧过程

教程:3.WireShark过滤器使用_哔哩哔哩_bilibili 

先cmd,输入 ipconfig,找到已连接的网络,而不是 disconnection

我连接的是学校的 wifi,所以选择 WLAN,开始抓包后,访问网址gaia.cs.umass.edu/wireshark-labs/INTRO-wireshark-file1.html

稍等一会,先让它抓个30秒,然后暂停,进行 http 的 filter,得到👇 

其他尝试👇

但是,并没有看到 HTTP GET 的消息,只有POST,估计这个网站我GET不到

但是抓百度,是可以直接抓到的

或者先开始抓包,再在 cmd Ping

🎧课后问题

第一个实验的目的是,介绍 WireShark,安装,启动,运动

(1)3种不同的协议

HTTP,TCP,OICQ

(2)两次POST时间差

(3)源IP 和目标IP

Source 和 Destination可以看

🌼HTTP

在这个实验中,我们会探索HTTP协议的几个方面

(1)基本的GET/response交互(2)HTTP消息格式(3)检索大型HTML文件(4)检索具有嵌入对象的HTML文件(5)HTTP认证和安全性

💴GET / response交互 

过程 

gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file1.html

destination没啥问题,但是HTTP那里,没有出现GET,只有POST

上面的结果也可能是对的,因为不同操作系统 或 不同WireShark版本,有所区别 

然后我从压缩的网址, http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip

解压到本地并在WireShark打开 http-ethereal-trace-1

才得到了GET

不是没有GET字段,而是自顶向下提供的网站,确实抓不到,我尝试打开其他网站,有些有GET,有些只有POST👇

解答

1. 您的浏览器是否运行HTTP版本1.0或1.1?服务器运行什么版本的HTTP?

浏览器 1.1👆

服务器 1.1👆

2. 您的浏览器会从接服务器接受哪种语言(如果有的话)?

但是开发者工具里,并没有看到 Accept-Language,也许不是每个请求都有

3. 您的计算机的IP地址是什么? gaia.cs.umass.edu服务器地址呢?

我的计算机是 10.252.120.241,服务器地址是 110.249.194.68

4. 服务器返回到浏览器的状态代码是什么?

200 OK

5. 服务器上HTML文件的最近一次修改是什么时候?

别人的有,但是我的没有 Last-Modified👇

6. 服务器返回多少字节的内容到您的浏览器?

很奇怪,POST 浏览器发出的1000多字节,但是服务器返回的 0 bytes

7. 通过检查数据包内容窗口中的原始数据,你是否看到有协议头在数据包列表窗口中未显示? 如果是,请举一个例子

💴HTTP消息格式

前面没显示 GET,应该是没有清除Edge浏览器缓存的原因

先打开火狐,清楚最近历史记录,我的是第一次安装的

然后先WireShark开始抓包,接着火狐打开该网址

http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html

打开后,再次刷新,然后停止抓包👇

根据结果回答下列问题

8. 检查第一个从您浏览器到服务器的HTTP GET请求的内容。您在HTTP GET中看到了“IF-MODIFIED-SINCE”行吗?

没有

9. 检查服务器响应的内容。服务器是否显式返回文件的内容? 你是怎么知道的?

返回了 HTML 文本

10. 现在,检查第二个HTTP GET请求的内容。 您在HTTP GET中看到了“IF-MODIFIED-SINCE:”行吗? 如果是,“IF-MODIFIED-SINCE:”头后面包含哪些信息?

(1)If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去

(2)这个头部告诉服务器,客户端认为资源在"Tue, 21 Nov 2023 06:59:01 GMT"之后进行了修改。服务器将使用这个信息来判断,是否返回更新后的资源或者返回一个状态码304(Not Modified)

(3)304 表示客户端缓存的资源仍然有效,无需重新传输

(4)这样的条件性请求可以减少不必要的数据传输,节省网络带宽和服务器资源

11. 针对第二个HTTP GET,从服务器响应的HTTP状态码和短语是什么?服务器是否明确地返回文件的内容?请解释👇

304 Not Modified

表示当前这个页面的缓存还保存着,并且服务器没有修改,因此这个缓存还能拿来用,就不需要服务器再发一遍了

💴检索大型HTML文件(长文件)

过程 

Historical Documents:THE BILL OF RIGHTS

清除缓存 -- 抓包 -- 打开网址 -- 停止抓包

清除缓存👆清除历史记录,而且清除完历史,缓存要连续清除2次,等下打开网址,要在原页面打开👇

但是我连接到的不是预定的页面....WireShark也没啥问题,不知道为啥,只能选择打开文件👇http-ethereal-trace-3

解答

12. 您的浏览器发送多少HTTP GET请求消息?哪个数据包包含了美国权利法案的消息?

一个 555 GET

200 OK 的数据包,包含了 4500 bytes 的信息

13. 哪个数据包包含响应HTTP GET请求的状态码和短语?

HTTP/1.1 200 OK

14. 响应中的状态码和短语是什么?

200 OK,表示请求成功,信息在返回的报文里

15. 需要多少包含数据的TCP段来执行单个HTTP响应和权利法案文本?

根据别人的答案,需要5个,但是我抓不到这个 HTML 网页的包,只能打开提供好的文件

💴检索具有嵌入对象的HTML文件

过程 

http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file4.html

您的浏览器应显示包含两个图像的短HTML文件。这两个图像在基本HTML文件中被引用。也就是说,图像本身不包含在HTML文件中;相反,图像的URL包含在已下载的HTML文件中

第一次,只收到了一个 .jpg

第二次,打开后,刷新,多等了1分钟👇

GPT的解释👇

  1. 第一行:IP地址10.252.121.239向178.79.137.164发出第一次GET请求,请求的资源是"8E_cover_small.jpg"
  2. 第二行:178.79.137.164服务器返回状态码302,表示请求的资源被重定向
  3. 第三行:IP地址10.252.121.239向202.116.36.202发出第二次GET请求,请求的资源是一个带有缓存路径的图片文件
  4. 第四行:202.116.36.202服务器成功返回了一张JPEG格式的图片,状态码为200
  5. 第五行:IP地址10.252.121.239向178.79.137.164发起第三次GET请求,请求的资源仍然是"8E_cover_small.jpg"
  6. 最后一行:178.79.137.164服务器返回状态码301,表示请求的资源被永久性重定向

第 3 次,打开提供的文件 http-ethereal-trace-4数据包

  1. 192.168.1.102向128.119.245.12请求HTML页面
  2. 128.119.245.12返回HTML页面给192.168.1.102,状态码为200 OK
  3. 192.168.1.102向165.193.123.218请求GIF图片
  4. 192.168.1.102向134.241.6.82请求JPG图片
  5. 165.193.123.218返回GIF图片给192.168.1.102,状态码为200 OK
  6. 134.241.6.82返回JPEG图片给192.168.1.102,状态码为200 Document follows

解答

16. 您的浏览器发送了几个HTTP GET请求消息? 这些GET请求发送到哪个IP地址?

3个,三个不同 IP 地址

17. 浏览器从两个网站串行还是并行下载了两张图片?请说明。

先解释下概念👇

串行:逐个执行任务,一个任务完成后才能执行下一个,顺序执行,适用于单处理器系统

并行:同时执行多个任务,并发执行,缩短总体执行时间,提高效率,适用于多处理器系统或分布式系统

根据第3,4行,两行 GET 的时间戳,相差了 0.003 秒(3毫秒),而通常串行时间间隔在几十到几百毫秒之间,所以是并行

💴HTTP认证和安全性

每次开始前清除一下缓存👇

再介绍一个概念

过程 

访问受密码保护的网站,并检查网站的HTTP消息交换的序列。URL http://gaia.cs.umass.edu/wireshark-labs/protected_pages/HTTP-wireshark-file5.html 是受密码保护的。用户名是“wireshark-students”(不包含引号),密码是“network”(再次不包含引号)

然而,我一个 HTTP 的包都没抓到,只能打开 http-ethereal-trace-5 数据包👇

 GPT解释👇

  1. 192.168.1.102向128.119.245.12请求一个受保护的HTML页面
  2. 128.119.245.12返回401错误状态码,要求进行身份验证
  3. 192.168.1.102再次向128.119.245.12请求相同的受保护的HTML页面
  4. 128.119.245.12返回状态码200 OK,即请求成功,返回HTML页面

虽然您的用户名和密码可能加密,但它们只是以一种称为Base64格式的格式进行编码。用户名和密码并没有加密!要确认这些,请访问

http://www.motobit.com/util/base64-decoder-encoder.asp

并输入base64编码的字符串 d2lyZXNoYXJrLXN0dWRlbnRz 并进行解码 

选择 decode,可以看到 base64 字符串,被解码为 用户名👇

解答

18. 对于您的浏览器的初始HTTP GET消息,服务器响应(状态码和短语)是什么响应?

401 Authorization Required,该状态码表示用户没有访问权限,需要进行身份认证

19. 当您的浏览器第二次发送HTTP GET消息时,HTTP GET消息中包含哪些新字段?

第一次

第二次

多了 Authorization 字段,向网页提交密码

🌼DNS

📱前置

(1)DNS 的全称是 Domain Name System(域名系统) 。它是一个用于将域名解析成 IP 地址的分布式数据库系统

(2)客户端发起 DNS 查询请求后,DNS 服务器会返回一个 IP 地址,从而使得客户端能够连接到所请求的网站或服务

DNS用于将域名解析为对应的IP地址,而后续的数据包则根据DNS提供的IP地址进行通信 

清除 DNS 缓存 

 windows 用 ipconfig /flushdns,不清除缓存结果一般无法正常显示

C:\Users\1>ipconfig /flushdnsWindows IP ConfigurationSuccessfully flushed the DNS Resolver Cache.

基本概念(20分钟过一遍)

DNS的基本概念是什么_云解析 DNS-阿里云帮助中心 (aliyun.com)

(图片引自阿里云)

本地域名服务器/ 没有缓存 /前提下,DNS解析过程👇

当用户在Web浏览器中输入"example.com"时,以下是DNS查询的简单步骤:

  1. 用户在浏览器中输入"example.com"。
  2. 本地域名服务器开始进行递归查询。
  3. 本地域名服务器向根域名服务器查询。
  4. 根域名服务器告诉本地域名服务器顶级域名服务器(.com TLD)的IP地址。
  5. 本地域名服务器向顶级域名服务器(.com TLD)查询。
  6. .com TLD服务器告诉本地域名服务器example.com权威域名服务器的IP地址。
  7. 本地域名服务器向example.com权威域名服务器发送查询。
  8. example.com权威域名服务器告诉本地域名服务器查询的主机IP地址。
  9. 本地域名服务器将查询的IP地址响应给Web浏览器。

一旦得到了example.com的IP地址,浏览器可以发出对该IP地址的HTTP请求,并从该IP地址处的Web服务器获取要显示在浏览器中的网页

DNS术语

递归查询:当你在浏览器中输入网址时,DNS服务器会帮助你找到对应的IP地址。递归查询是指DNS服务器从别的服务器上获取准确的查询结果,然后将结果返回给你

迭代查询:当DNS服务器无法直接回答你的查询,它会告诉你去问另一个DNS服务器。这个过程可能会进行多次,直到找到查询结果为止

DNS缓存:DNS服务器会将解析结果存储在靠近你的位置,这样下次查询相同的网址时可以更快地获取结果,减少了递归查询的时间

TTL(Time To Leave):这是一个时间值,告诉DNS服务器可以将解析结果缓存多长时间。当缓存时间到期后,DNS服务器会删除该解析记录,需要重新进行查询

IPV4、IPV6双栈技术:在一个系统中同时使用IPv4和IPv6协议,以便能够连接到不同类型的网络(双栈 Dual IP Stack)

TLD服务器:顶级域名服务器(Top-level domains Server),负责管理顶级域名(如.com、.net等)的IP地址

DNS Resolver:也称为本地域名服务器,是处理你发出的初始DNS请求的第一站。它可以是由你的互联网服务提供商(ISP)分配的DNS服务器,也可以是像Google的8.8.8.8这样的公共DNS服务器

根域名服务器:当本地域名服务器无法找到查询结果时,它会向根域名服务器进行查询,并获取顶级域名服务器的IP地址

DNS记录和消息

What are DNS records? | Cloudflare (cloudflare-cn.com)

DNS报文格式解析(非常详细) (biancheng.net)

nslookup

nslookup命令详解:nslookup是一种网络管理命令行工具 - 习久性成 - 博客园 (cnblogs.com)

📱过程

DNS实验中一个服务器已经不在使用,且部分现象无法解释,速通~

(一)nslookup

nslookup -option1 -option2 host-to-find dns-server

nslookup解答

1. 运行*nslookup*以获取一个亚洲的Web服务器的IP地址。该服务器的IP地址是什么?

C:\Users\1>nslookup www.google.com
Server:  UnKnown
Address:  202.116.32.254Non-authoritative answer:
Name:    www.google.com
Addresses:  2a03:2880:f11c:8083:face:b00c:0:25de142.251.42.228

142.251.42.228

2. 运行*nslookup*来确定一个欧洲的大学的权威DNS服务器。

解释 

(1)-type=NS 是一个选项,表示查询的类型是 NS(Name Server)记录

(2)nslookup 命令后加上 -type=NS 选项,那么查询结果会返回与所查询域名相关的权威DNS服务器的信息。这些信息包括权威DNS服务器的域名和对应的IP地址

(3)如果不加 -type=NS 选项,则默认的查询类型是 A 记录,即查询域名对应的IPv4地址

(不同的查询类型,会返回不同的信息)

3. 运行*nslookup*,使用问题2中一个已获得的DNS服务器,来查询Yahoo!邮箱的邮件服务器。它的IP地址是什么?

(二)ipconfig

ipconfig命令图文教程,查看本机网络ip,dns刷新缓存 - 腾讯云开发者社区-腾讯云 (tencent.com)

(三)WireShark 追踪 DNS

清除DNS缓存,清除FIreFox浏览器记录,打开WireShark抓包WLAN,浏览器输入

http://www.ietf.org,停止抓包

ipconfig查询WLAN的IPv4地址

WireShark查询👇

问题解答

点击第一个,下方第一行 Frame 的最后

4. DNS查询和响应消息,通过UDP发送

5. 下方 User Datagram Protocal,显示 port: 53

6. Destination

7. Type 为 “A”,表示查询 IP 地址(IPv4);“AAAA”,表示查询 IPv6 地址

没有包含Answers

8. 找到DNS响应,Domain Name System点击,我这里有5条,包含类型和 IPv4 地址

9. 根据 8. 得到的 addr👇

这里涉及 WireShark 过滤器

Wireshark过滤器写法总结 - willingtolove - 博客园 (cnblogs.com)

所以,是相对应的

10. 只是部分需要发起新的DNS查询(未缓存 / 缓存过期 -- 才需要)

下一个链接👇

使用nslookup查询 www.mit.edu

11. 目标和源端口都53,参考上面User Datagram Protocal

12. 目标 IP 地址,是默认本地DNS的IP地址,参考 Internet Protocol Version 和 nslookup里Server下的Address

13. 上面做过了

14. 同上

现在输入下面两个网址,同时使用Wireshark和cmd ipconfig,重复上面实验

(1)nslookup -type=NS mit.edu

(2)nslookup www.aiit.or.kr bitsy.mit.edu(这个DNS服务器,好像有点问题)

That's the end ~

其实,还是建议用 源码提供的 wireshark 数据包,在 wireshark 里打开,不然很多干扰

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

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

相关文章

智能电子墨水屏价签系统版

无线2.4G通信,加密的交流,穿透力强,不惧障碍 自定义双向通信协议,安全可靠 海量模板随意切换,模板也可自行DIY设计 远程批量管理,多店铺管理 超低功耗,常规可持续使用5年 工作温度范围&…

[新人向]MySQL和Navicat下载、安装及使用详细教程

MySQL和Navicat下载和安装及使用详细教程 因为这些软件的安装很多都是纯英文,作为新手安装真的需要摸索好久,包括我自己,所以Pipi酱就把自己的经验分享给大家~ MySQL的安装教程 一、下载安装包链接: 1.下载MySQL:ht…

Python MD5加密的三种方法(可加盐)

方法一:MD5直接加密 import hashlibtext1123456 print(text1) mdhashlib.md5(text1.encode()) # 创建md5对象 md5pwdmd.hexdigest() # md5加密 print(md5pwd) 输出结果: 方法二:MD5盐加密,将盐拼接在原密码后 import ha…

开源生成式AI初创平台together.ai,获7.3亿元融资

11月30日,开源生成式AI平台Together AI在官网宣布,获得1.025亿美元(约7.3亿元)A轮融资。本次由凯鹏华盈 (Kleiner Perkins) 领投,英伟达、Emergence Capital、 NEA、Prosperity 7、Greycroft等跟投。 公开资料显示&am…

样品实验Oxfilm351CN高沸点低VOC成膜助剂TDS说明书

样品实验Oxfilm351CN高沸点低VOC成膜助剂TDS说明书 1KG/瓶

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数? HOOK概述 本质:Windows消系统的消息过滤器。 全局钩子…

嵌入式常见的几种接口

嵌入式开发中,常见的外设通信接口/协议有SPI,I2C,UART三种,本文先分三个部分对SPI,I2C,UART进行介绍,最后对这三种协议进行比较。 1 SPI 1.1 SPI的简介 SPI(Serial Peripheral …

SAP S/4HANA 中的业务合作伙伴概念

原文地址:https://blogs.sap.com/2023/07/16/business-partner-concept-in-sap-s-4hana/ 1.1 什么是业务合作伙伴? 在 SAP S/4 HANA 中,业务合作伙伴是维护业务合作伙伴、客户和供应商(以前称为供应商)主数据的主…

超级利器!Postman自动化接口测试让你提升测试效率,节省宝贵时间!

Postman自动化接口测试 该篇文章针对已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境: Window 7 - 64 Postman 版本(免费版):Chrome App v5.5.3 …

Airtest进阶使用篇!提高脚本稳定性 + 批量运行脚本!

一、背景 今天彭于晏为大家分享Airtest进阶使用篇,主要包含两块的内容: 提高脚本稳定性批量运行脚本生成测试报告 二、提高脚本稳定性 1、添加全局配置: #全局设置 ST.FIND_TIMEOUT10 #设置隐式等待时长,默认识别图片时间是30秒,可改为…

C++:C++11新特性---右值引用

文章目录 初始化方式显示查看类型initializer_listdecltype左值引用和右值引用move左右值引用的场景 万能引用和完美转发 本篇总结C11新特性 初始化方式 C11对参数列表的初始化有了更明确的定义,可以这样进行定义 // 列表初始化 void test1() {// 旧版本int x 0…

免费WordPress站群插件-批量管理站群的免费软件

WordPress站群插件:让文章管理如丝般顺滑 在众多网站建设工具中,WordPress一直以其简便易用、丰富的插件生态而备受青睐。对于站群管理者而言,如何高效地更新、发布和推送文章是一项不可忽视的任务。本文将专注分享一款WordPress站群插件&am…

Audacity降噪消除视频中杂音

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

QListWidget中自定义widget大小自适应

背景: QListWidget中的item,可以添加自定义的widget。 但是怎么去调整widget的大小呢? 参考:QT QListWidget的添加与删除,滚动条显示或隐藏,判断是否滑到顶部或底部,并使QListWidgetItem自适…

Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)

目录 Node.js 文件系统模块(二) Node.js 文件系统模块(三) Node.js 文件系统模块(四) Node.js 路径模块 Node.js 连接 MySQL Node.js nodemon Node.js 操作 MySQL Node.js 应用 Node.js 文件系统模块…

每日汇评:在美国通胀数据前,黄金多头变得谨慎起来

黄金价格在连续五天上涨后,周四早间稍作休息; 在个人消费支出通胀数据公布前,美元和美债收益率巩固了下行空间; 超买状况可能限制金价的上行空间,因为月底的资金流动可能占主导地位; 昨日亚盘交易时段&…

子类拷贝构造函数会调用父类拷贝构造函数吗?

一. 编译器提供的默认子类拷贝构造函数会调用父类拷贝构造函数。 #include <iostream> #include <string> using namespace std;class Parent { public:Parent(string home_address "中国") : m_home_address(home_address) {cout << "调用…

学习笔记小结

redis-cluster集群 redis3.0引入的分布式存储方案 集群由多个node节点组成&#xff0c;redis数据分布在这些节点当中。 在集群之中分为主节点和从节点 集群模式当中&#xff0c;主从一一对应&#xff0c;数据的写入和读取与主从模式一样&#xff0c;主负责写&#xff0c;从…

C陷阱与缺陷——第3章 语义陷阱

1. 指针和数组 C语言中只有一维数组&#xff0c;而且数组的大小必须在编译器就作为一个常数确定下来&#xff0c;然而在C语言中数组的元素可以是任何类型的对象&#xff0c;当然也可以是另外的一个数组&#xff0c;这样&#xff0c;要仿真出一个多维数组就不是难事。 对于一个…

Mac电脑版程序创建工具 VMware InstallBuilder Enterprise mac最新

VMware InstallBuilder Enterprise 是一款功能强大、操作简单、跨平台支持的软件安装和部署工具&#xff0c;可以让开发者更加高效地创建和部署软件&#xff0c;并提供了丰富的功能和工具&#xff0c;适用于不同的用户需求和场景。 内置调试器 轻松排除应用程序安装过程中的故…